autobyteus 1.2.1__py3-none-any.whl → 1.3.0__py3-none-any.whl

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 (472) hide show
  1. autobyteus/agent/agent.py +15 -5
  2. autobyteus/agent/bootstrap_steps/__init__.py +3 -3
  3. autobyteus/agent/bootstrap_steps/agent_bootstrapper.py +5 -59
  4. autobyteus/agent/bootstrap_steps/base_bootstrap_step.py +1 -4
  5. autobyteus/agent/bootstrap_steps/mcp_server_prewarming_step.py +1 -3
  6. autobyteus/agent/bootstrap_steps/system_prompt_processing_step.py +16 -13
  7. autobyteus/agent/bootstrap_steps/working_context_snapshot_restore_step.py +38 -0
  8. autobyteus/agent/bootstrap_steps/workspace_context_initialization_step.py +2 -4
  9. autobyteus/agent/context/agent_config.py +47 -20
  10. autobyteus/agent/context/agent_context.py +23 -18
  11. autobyteus/agent/context/agent_runtime_state.py +21 -19
  12. autobyteus/agent/events/__init__.py +16 -1
  13. autobyteus/agent/events/agent_events.py +43 -3
  14. autobyteus/agent/events/agent_input_event_queue_manager.py +79 -26
  15. autobyteus/agent/events/event_store.py +57 -0
  16. autobyteus/agent/events/notifiers.py +69 -59
  17. autobyteus/agent/events/worker_event_dispatcher.py +21 -64
  18. autobyteus/agent/factory/agent_factory.py +83 -6
  19. autobyteus/agent/handlers/__init__.py +2 -0
  20. autobyteus/agent/handlers/approved_tool_invocation_event_handler.py +51 -34
  21. autobyteus/agent/handlers/bootstrap_event_handler.py +155 -0
  22. autobyteus/agent/handlers/inter_agent_message_event_handler.py +10 -0
  23. autobyteus/agent/handlers/lifecycle_event_logger.py +19 -11
  24. autobyteus/agent/handlers/llm_complete_response_received_event_handler.py +10 -15
  25. autobyteus/agent/handlers/llm_user_message_ready_event_handler.py +188 -48
  26. autobyteus/agent/handlers/tool_execution_approval_event_handler.py +0 -10
  27. autobyteus/agent/handlers/tool_invocation_request_event_handler.py +53 -48
  28. autobyteus/agent/handlers/tool_result_event_handler.py +7 -8
  29. autobyteus/agent/handlers/user_input_message_event_handler.py +10 -3
  30. autobyteus/agent/input_processor/memory_ingest_input_processor.py +44 -0
  31. autobyteus/agent/lifecycle/__init__.py +12 -0
  32. autobyteus/agent/lifecycle/base_processor.py +109 -0
  33. autobyteus/agent/lifecycle/events.py +35 -0
  34. autobyteus/agent/lifecycle/processor_definition.py +36 -0
  35. autobyteus/agent/lifecycle/processor_registry.py +106 -0
  36. autobyteus/agent/llm_request_assembler.py +98 -0
  37. autobyteus/agent/llm_response_processor/__init__.py +1 -8
  38. autobyteus/agent/message/context_file_type.py +1 -1
  39. autobyteus/agent/runtime/agent_runtime.py +29 -21
  40. autobyteus/agent/runtime/agent_worker.py +98 -19
  41. autobyteus/agent/shutdown_steps/__init__.py +2 -0
  42. autobyteus/agent/shutdown_steps/agent_shutdown_orchestrator.py +2 -0
  43. autobyteus/agent/shutdown_steps/tool_cleanup_step.py +58 -0
  44. autobyteus/agent/status/__init__.py +14 -0
  45. autobyteus/agent/status/manager.py +93 -0
  46. autobyteus/agent/status/status_deriver.py +96 -0
  47. autobyteus/agent/{phases/phase_enum.py → status/status_enum.py} +16 -16
  48. autobyteus/agent/status/status_update_utils.py +73 -0
  49. autobyteus/agent/streaming/__init__.py +52 -5
  50. autobyteus/agent/streaming/adapters/__init__.py +18 -0
  51. autobyteus/agent/streaming/adapters/invocation_adapter.py +184 -0
  52. autobyteus/agent/streaming/adapters/tool_call_parsing.py +163 -0
  53. autobyteus/agent/streaming/adapters/tool_syntax_registry.py +67 -0
  54. autobyteus/agent/streaming/agent_event_stream.py +3 -183
  55. autobyteus/agent/streaming/api_tool_call/__init__.py +16 -0
  56. autobyteus/agent/streaming/api_tool_call/file_content_streamer.py +56 -0
  57. autobyteus/agent/streaming/api_tool_call/json_string_field_extractor.py +175 -0
  58. autobyteus/agent/streaming/api_tool_call_streaming_response_handler.py +4 -0
  59. autobyteus/agent/streaming/events/__init__.py +6 -0
  60. autobyteus/agent/streaming/events/stream_event_payloads.py +284 -0
  61. autobyteus/agent/streaming/events/stream_events.py +141 -0
  62. autobyteus/agent/streaming/handlers/__init__.py +15 -0
  63. autobyteus/agent/streaming/handlers/api_tool_call_streaming_response_handler.py +303 -0
  64. autobyteus/agent/streaming/handlers/parsing_streaming_response_handler.py +107 -0
  65. autobyteus/agent/streaming/handlers/pass_through_streaming_response_handler.py +107 -0
  66. autobyteus/agent/streaming/handlers/streaming_handler_factory.py +177 -0
  67. autobyteus/agent/streaming/handlers/streaming_response_handler.py +58 -0
  68. autobyteus/agent/streaming/parser/__init__.py +61 -0
  69. autobyteus/agent/streaming/parser/event_emitter.py +181 -0
  70. autobyteus/agent/streaming/parser/events.py +4 -0
  71. autobyteus/agent/streaming/parser/invocation_adapter.py +4 -0
  72. autobyteus/agent/streaming/parser/json_parsing_strategies/__init__.py +19 -0
  73. autobyteus/agent/streaming/parser/json_parsing_strategies/base.py +32 -0
  74. autobyteus/agent/streaming/parser/json_parsing_strategies/default.py +34 -0
  75. autobyteus/agent/streaming/parser/json_parsing_strategies/gemini.py +31 -0
  76. autobyteus/agent/streaming/parser/json_parsing_strategies/openai.py +64 -0
  77. autobyteus/agent/streaming/parser/json_parsing_strategies/registry.py +75 -0
  78. autobyteus/agent/streaming/parser/parser_context.py +227 -0
  79. autobyteus/agent/streaming/parser/parser_factory.py +132 -0
  80. autobyteus/agent/streaming/parser/sentinel_format.py +7 -0
  81. autobyteus/agent/streaming/parser/state_factory.py +62 -0
  82. autobyteus/agent/streaming/parser/states/__init__.py +1 -0
  83. autobyteus/agent/streaming/parser/states/base_state.py +60 -0
  84. autobyteus/agent/streaming/parser/states/custom_xml_tag_run_bash_parsing_state.py +38 -0
  85. autobyteus/agent/streaming/parser/states/custom_xml_tag_write_file_parsing_state.py +55 -0
  86. autobyteus/agent/streaming/parser/states/delimited_content_state.py +146 -0
  87. autobyteus/agent/streaming/parser/states/json_initialization_state.py +144 -0
  88. autobyteus/agent/streaming/parser/states/json_tool_parsing_state.py +137 -0
  89. autobyteus/agent/streaming/parser/states/sentinel_content_state.py +30 -0
  90. autobyteus/agent/streaming/parser/states/sentinel_initialization_state.py +117 -0
  91. autobyteus/agent/streaming/parser/states/text_state.py +78 -0
  92. autobyteus/agent/streaming/parser/states/xml_patch_file_tool_parsing_state.py +328 -0
  93. autobyteus/agent/streaming/parser/states/xml_run_bash_tool_parsing_state.py +129 -0
  94. autobyteus/agent/streaming/parser/states/xml_tag_initialization_state.py +151 -0
  95. autobyteus/agent/streaming/parser/states/xml_tool_parsing_state.py +63 -0
  96. autobyteus/agent/streaming/parser/states/xml_write_file_tool_parsing_state.py +343 -0
  97. autobyteus/agent/streaming/parser/strategies/__init__.py +17 -0
  98. autobyteus/agent/streaming/parser/strategies/base.py +24 -0
  99. autobyteus/agent/streaming/parser/strategies/json_tool_strategy.py +26 -0
  100. autobyteus/agent/streaming/parser/strategies/registry.py +28 -0
  101. autobyteus/agent/streaming/parser/strategies/sentinel_strategy.py +23 -0
  102. autobyteus/agent/streaming/parser/strategies/xml_tag_strategy.py +21 -0
  103. autobyteus/agent/streaming/parser/stream_scanner.py +167 -0
  104. autobyteus/agent/streaming/parser/streaming_parser.py +212 -0
  105. autobyteus/agent/streaming/parser/tool_call_parsing.py +4 -0
  106. autobyteus/agent/streaming/parser/tool_constants.py +7 -0
  107. autobyteus/agent/streaming/parser/tool_syntax_registry.py +4 -0
  108. autobyteus/agent/streaming/parser/xml_tool_parsing_state_registry.py +55 -0
  109. autobyteus/agent/streaming/parsing_streaming_response_handler.py +4 -0
  110. autobyteus/agent/streaming/pass_through_streaming_response_handler.py +4 -0
  111. autobyteus/agent/streaming/queue_streamer.py +3 -57
  112. autobyteus/agent/streaming/segments/__init__.py +5 -0
  113. autobyteus/agent/streaming/segments/segment_events.py +82 -0
  114. autobyteus/agent/streaming/stream_event_payloads.py +2 -223
  115. autobyteus/agent/streaming/stream_events.py +3 -140
  116. autobyteus/agent/streaming/streaming_handler_factory.py +4 -0
  117. autobyteus/agent/streaming/streaming_response_handler.py +4 -0
  118. autobyteus/agent/streaming/streams/__init__.py +5 -0
  119. autobyteus/agent/streaming/streams/agent_event_stream.py +197 -0
  120. autobyteus/agent/streaming/utils/__init__.py +5 -0
  121. autobyteus/agent/streaming/utils/queue_streamer.py +59 -0
  122. autobyteus/agent/system_prompt_processor/__init__.py +2 -0
  123. autobyteus/agent/system_prompt_processor/available_skills_processor.py +96 -0
  124. autobyteus/agent/system_prompt_processor/base_processor.py +1 -1
  125. autobyteus/agent/system_prompt_processor/processor_meta.py +15 -2
  126. autobyteus/agent/system_prompt_processor/tool_manifest_injector_processor.py +39 -58
  127. autobyteus/agent/token_budget.py +56 -0
  128. autobyteus/agent/tool_execution_result_processor/memory_ingest_tool_result_processor.py +29 -0
  129. autobyteus/agent/tool_invocation.py +16 -40
  130. autobyteus/agent/tool_invocation_preprocessor/__init__.py +9 -0
  131. autobyteus/agent/tool_invocation_preprocessor/base_preprocessor.py +45 -0
  132. autobyteus/agent/tool_invocation_preprocessor/processor_definition.py +15 -0
  133. autobyteus/agent/tool_invocation_preprocessor/processor_meta.py +33 -0
  134. autobyteus/agent/tool_invocation_preprocessor/processor_registry.py +60 -0
  135. autobyteus/agent/utils/wait_for_idle.py +12 -14
  136. autobyteus/agent/workspace/base_workspace.py +6 -27
  137. autobyteus/agent_team/agent_team.py +3 -3
  138. autobyteus/agent_team/agent_team_builder.py +1 -41
  139. autobyteus/agent_team/bootstrap_steps/__init__.py +0 -4
  140. autobyteus/agent_team/bootstrap_steps/agent_configuration_preparation_step.py +8 -18
  141. autobyteus/agent_team/bootstrap_steps/agent_team_bootstrapper.py +4 -16
  142. autobyteus/agent_team/bootstrap_steps/base_agent_team_bootstrap_step.py +1 -2
  143. autobyteus/agent_team/bootstrap_steps/coordinator_initialization_step.py +1 -2
  144. autobyteus/agent_team/bootstrap_steps/task_notifier_initialization_step.py +1 -2
  145. autobyteus/agent_team/bootstrap_steps/team_context_initialization_step.py +4 -4
  146. autobyteus/agent_team/context/agent_team_config.py +6 -3
  147. autobyteus/agent_team/context/agent_team_context.py +25 -3
  148. autobyteus/agent_team/context/agent_team_runtime_state.py +9 -6
  149. autobyteus/agent_team/events/__init__.py +11 -0
  150. autobyteus/agent_team/events/agent_team_event_dispatcher.py +22 -9
  151. autobyteus/agent_team/events/agent_team_events.py +16 -0
  152. autobyteus/agent_team/events/event_store.py +57 -0
  153. autobyteus/agent_team/factory/agent_team_factory.py +8 -0
  154. autobyteus/agent_team/handlers/inter_agent_message_request_event_handler.py +18 -2
  155. autobyteus/agent_team/handlers/lifecycle_agent_team_event_handler.py +21 -5
  156. autobyteus/agent_team/handlers/process_user_message_event_handler.py +17 -8
  157. autobyteus/agent_team/handlers/tool_approval_team_event_handler.py +19 -4
  158. autobyteus/agent_team/runtime/agent_team_runtime.py +41 -10
  159. autobyteus/agent_team/runtime/agent_team_worker.py +69 -5
  160. autobyteus/agent_team/status/__init__.py +14 -0
  161. autobyteus/agent_team/status/agent_team_status.py +18 -0
  162. autobyteus/agent_team/status/agent_team_status_manager.py +33 -0
  163. autobyteus/agent_team/status/status_deriver.py +62 -0
  164. autobyteus/agent_team/status/status_update_utils.py +42 -0
  165. autobyteus/agent_team/streaming/__init__.py +2 -2
  166. autobyteus/agent_team/streaming/agent_team_event_notifier.py +6 -6
  167. autobyteus/agent_team/streaming/agent_team_stream_event_payloads.py +4 -4
  168. autobyteus/agent_team/streaming/agent_team_stream_events.py +3 -3
  169. autobyteus/agent_team/system_prompt_processor/__init__.py +6 -0
  170. autobyteus/agent_team/system_prompt_processor/team_manifest_injector_processor.py +76 -0
  171. autobyteus/agent_team/task_notification/task_notification_mode.py +19 -0
  172. autobyteus/agent_team/utils/wait_for_idle.py +4 -4
  173. autobyteus/cli/agent_cli.py +18 -10
  174. autobyteus/cli/agent_team_tui/app.py +14 -11
  175. autobyteus/cli/agent_team_tui/state.py +13 -15
  176. autobyteus/cli/agent_team_tui/widgets/agent_list_sidebar.py +15 -15
  177. autobyteus/cli/agent_team_tui/widgets/focus_pane.py +143 -36
  178. autobyteus/cli/agent_team_tui/widgets/renderables.py +1 -1
  179. autobyteus/cli/agent_team_tui/widgets/shared.py +25 -25
  180. autobyteus/cli/cli_display.py +193 -44
  181. autobyteus/cli/workflow_tui/app.py +9 -10
  182. autobyteus/cli/workflow_tui/state.py +14 -16
  183. autobyteus/cli/workflow_tui/widgets/agent_list_sidebar.py +15 -15
  184. autobyteus/cli/workflow_tui/widgets/focus_pane.py +137 -35
  185. autobyteus/cli/workflow_tui/widgets/renderables.py +1 -1
  186. autobyteus/cli/workflow_tui/widgets/shared.py +25 -25
  187. autobyteus/clients/autobyteus_client.py +94 -1
  188. autobyteus/events/event_types.py +11 -18
  189. autobyteus/llm/api/autobyteus_llm.py +33 -29
  190. autobyteus/llm/api/claude_llm.py +142 -36
  191. autobyteus/llm/api/gemini_llm.py +163 -59
  192. autobyteus/llm/api/grok_llm.py +1 -1
  193. autobyteus/llm/api/minimax_llm.py +26 -0
  194. autobyteus/llm/api/mistral_llm.py +113 -87
  195. autobyteus/llm/api/ollama_llm.py +9 -42
  196. autobyteus/llm/api/openai_compatible_llm.py +127 -91
  197. autobyteus/llm/api/openai_llm.py +3 -3
  198. autobyteus/llm/api/openai_responses_llm.py +324 -0
  199. autobyteus/llm/api/zhipu_llm.py +21 -2
  200. autobyteus/llm/autobyteus_provider.py +70 -60
  201. autobyteus/llm/base_llm.py +85 -81
  202. autobyteus/llm/converters/__init__.py +14 -0
  203. autobyteus/llm/converters/anthropic_tool_call_converter.py +37 -0
  204. autobyteus/llm/converters/gemini_tool_call_converter.py +57 -0
  205. autobyteus/llm/converters/mistral_tool_call_converter.py +37 -0
  206. autobyteus/llm/converters/openai_tool_call_converter.py +38 -0
  207. autobyteus/llm/extensions/base_extension.py +6 -12
  208. autobyteus/llm/extensions/token_usage_tracking_extension.py +45 -18
  209. autobyteus/llm/llm_factory.py +282 -204
  210. autobyteus/llm/lmstudio_provider.py +60 -49
  211. autobyteus/llm/models.py +35 -2
  212. autobyteus/llm/ollama_provider.py +60 -49
  213. autobyteus/llm/ollama_provider_resolver.py +0 -1
  214. autobyteus/llm/prompt_renderers/__init__.py +19 -0
  215. autobyteus/llm/prompt_renderers/anthropic_prompt_renderer.py +104 -0
  216. autobyteus/llm/prompt_renderers/autobyteus_prompt_renderer.py +19 -0
  217. autobyteus/llm/prompt_renderers/base_prompt_renderer.py +10 -0
  218. autobyteus/llm/prompt_renderers/gemini_prompt_renderer.py +63 -0
  219. autobyteus/llm/prompt_renderers/mistral_prompt_renderer.py +87 -0
  220. autobyteus/llm/prompt_renderers/ollama_prompt_renderer.py +51 -0
  221. autobyteus/llm/prompt_renderers/openai_chat_renderer.py +97 -0
  222. autobyteus/llm/prompt_renderers/openai_responses_renderer.py +101 -0
  223. autobyteus/llm/providers.py +1 -3
  224. autobyteus/llm/token_counter/claude_token_counter.py +56 -25
  225. autobyteus/llm/token_counter/mistral_token_counter.py +12 -8
  226. autobyteus/llm/token_counter/openai_token_counter.py +24 -5
  227. autobyteus/llm/token_counter/token_counter_factory.py +12 -5
  228. autobyteus/llm/utils/llm_config.py +6 -12
  229. autobyteus/llm/utils/media_payload_formatter.py +27 -20
  230. autobyteus/llm/utils/messages.py +55 -3
  231. autobyteus/llm/utils/response_types.py +3 -0
  232. autobyteus/llm/utils/tool_call_delta.py +31 -0
  233. autobyteus/memory/__init__.py +35 -0
  234. autobyteus/memory/compaction/__init__.py +9 -0
  235. autobyteus/memory/compaction/compaction_result.py +8 -0
  236. autobyteus/memory/compaction/compactor.py +89 -0
  237. autobyteus/memory/compaction/summarizer.py +11 -0
  238. autobyteus/memory/compaction_snapshot_builder.py +84 -0
  239. autobyteus/memory/memory_manager.py +205 -0
  240. autobyteus/memory/models/__init__.py +14 -0
  241. autobyteus/memory/models/episodic_item.py +41 -0
  242. autobyteus/memory/models/memory_types.py +7 -0
  243. autobyteus/memory/models/raw_trace_item.py +79 -0
  244. autobyteus/memory/models/semantic_item.py +41 -0
  245. autobyteus/memory/models/tool_interaction.py +20 -0
  246. autobyteus/memory/path_resolver.py +27 -0
  247. autobyteus/memory/policies/__init__.py +5 -0
  248. autobyteus/memory/policies/compaction_policy.py +16 -0
  249. autobyteus/memory/restore/__init__.py +1 -0
  250. autobyteus/memory/restore/working_context_snapshot_bootstrapper.py +61 -0
  251. autobyteus/memory/retrieval/__init__.py +7 -0
  252. autobyteus/memory/retrieval/memory_bundle.py +11 -0
  253. autobyteus/memory/retrieval/retriever.py +13 -0
  254. autobyteus/memory/store/__init__.py +9 -0
  255. autobyteus/memory/store/base_store.py +14 -0
  256. autobyteus/memory/store/file_store.py +98 -0
  257. autobyteus/memory/store/working_context_snapshot_store.py +28 -0
  258. autobyteus/memory/tool_interaction_builder.py +46 -0
  259. autobyteus/memory/turn_tracker.py +9 -0
  260. autobyteus/memory/working_context_snapshot.py +69 -0
  261. autobyteus/memory/working_context_snapshot_serializer.py +135 -0
  262. autobyteus/multimedia/audio/api/autobyteus_audio_client.py +19 -5
  263. autobyteus/multimedia/audio/api/gemini_audio_client.py +109 -16
  264. autobyteus/multimedia/audio/audio_client_factory.py +47 -9
  265. autobyteus/multimedia/audio/audio_model.py +2 -1
  266. autobyteus/multimedia/image/api/autobyteus_image_client.py +19 -5
  267. autobyteus/multimedia/image/api/gemini_image_client.py +39 -17
  268. autobyteus/multimedia/image/api/openai_image_client.py +125 -43
  269. autobyteus/multimedia/image/autobyteus_image_provider.py +2 -1
  270. autobyteus/multimedia/image/image_client_factory.py +47 -15
  271. autobyteus/multimedia/image/image_model.py +5 -2
  272. autobyteus/multimedia/providers.py +3 -2
  273. autobyteus/skills/loader.py +71 -0
  274. autobyteus/skills/model.py +11 -0
  275. autobyteus/skills/registry.py +70 -0
  276. autobyteus/task_management/tools/todo_tools/add_todo.py +2 -2
  277. autobyteus/task_management/tools/todo_tools/create_todo_list.py +2 -2
  278. autobyteus/task_management/tools/todo_tools/update_todo_status.py +2 -2
  279. autobyteus/tools/__init__.py +34 -47
  280. autobyteus/tools/base_tool.py +7 -0
  281. autobyteus/tools/file/__init__.py +2 -6
  282. autobyteus/tools/file/patch_file.py +149 -0
  283. autobyteus/tools/file/read_file.py +36 -5
  284. autobyteus/tools/file/write_file.py +4 -1
  285. autobyteus/tools/functional_tool.py +43 -6
  286. autobyteus/tools/mcp/__init__.py +2 -0
  287. autobyteus/tools/mcp/config_service.py +5 -1
  288. autobyteus/tools/mcp/server/__init__.py +2 -0
  289. autobyteus/tools/mcp/server/http_managed_mcp_server.py +1 -1
  290. autobyteus/tools/mcp/server/websocket_managed_mcp_server.py +141 -0
  291. autobyteus/tools/mcp/server_instance_manager.py +8 -1
  292. autobyteus/tools/mcp/types.py +61 -0
  293. autobyteus/tools/multimedia/audio_tools.py +70 -17
  294. autobyteus/tools/multimedia/download_media_tool.py +18 -4
  295. autobyteus/tools/multimedia/image_tools.py +246 -62
  296. autobyteus/tools/operation_executor/journal_manager.py +107 -0
  297. autobyteus/tools/operation_executor/operation_event_buffer.py +57 -0
  298. autobyteus/tools/operation_executor/operation_event_producer.py +29 -0
  299. autobyteus/tools/operation_executor/operation_executor.py +58 -0
  300. autobyteus/tools/registry/tool_definition.py +43 -2
  301. autobyteus/tools/skill/load_skill.py +50 -0
  302. autobyteus/tools/terminal/__init__.py +45 -0
  303. autobyteus/tools/terminal/ansi_utils.py +32 -0
  304. autobyteus/tools/terminal/background_process_manager.py +233 -0
  305. autobyteus/tools/terminal/output_buffer.py +105 -0
  306. autobyteus/tools/terminal/prompt_detector.py +63 -0
  307. autobyteus/tools/terminal/pty_session.py +241 -0
  308. autobyteus/tools/terminal/session_factory.py +20 -0
  309. autobyteus/tools/terminal/terminal_session_manager.py +226 -0
  310. autobyteus/tools/terminal/tools/__init__.py +13 -0
  311. autobyteus/tools/terminal/tools/get_process_output.py +81 -0
  312. autobyteus/tools/terminal/tools/run_bash.py +109 -0
  313. autobyteus/tools/terminal/tools/start_background_process.py +104 -0
  314. autobyteus/tools/terminal/tools/stop_background_process.py +67 -0
  315. autobyteus/tools/terminal/types.py +54 -0
  316. autobyteus/tools/terminal/wsl_tmux_session.py +221 -0
  317. autobyteus/tools/terminal/wsl_utils.py +156 -0
  318. autobyteus/tools/transaction_management/backup_handler.py +48 -0
  319. autobyteus/tools/transaction_management/operation_lifecycle_manager.py +62 -0
  320. autobyteus/tools/usage/__init__.py +1 -2
  321. autobyteus/tools/usage/formatters/__init__.py +17 -1
  322. autobyteus/tools/usage/formatters/base_formatter.py +8 -0
  323. autobyteus/tools/usage/formatters/default_xml_schema_formatter.py +2 -2
  324. autobyteus/tools/usage/formatters/mistral_json_schema_formatter.py +18 -0
  325. autobyteus/tools/usage/formatters/patch_file_xml_example_formatter.py +64 -0
  326. autobyteus/tools/usage/formatters/patch_file_xml_schema_formatter.py +31 -0
  327. autobyteus/tools/usage/formatters/run_bash_xml_example_formatter.py +32 -0
  328. autobyteus/tools/usage/formatters/run_bash_xml_schema_formatter.py +36 -0
  329. autobyteus/tools/usage/formatters/write_file_xml_example_formatter.py +53 -0
  330. autobyteus/tools/usage/formatters/write_file_xml_schema_formatter.py +31 -0
  331. autobyteus/tools/usage/providers/tool_manifest_provider.py +10 -10
  332. autobyteus/tools/usage/registries/__init__.py +1 -3
  333. autobyteus/tools/usage/registries/tool_formatting_registry.py +115 -8
  334. autobyteus/tools/usage/tool_schema_provider.py +51 -0
  335. autobyteus/tools/web/__init__.py +4 -0
  336. autobyteus/tools/web/read_url_tool.py +80 -0
  337. autobyteus/utils/diff_utils.py +271 -0
  338. autobyteus/utils/download_utils.py +109 -0
  339. autobyteus/utils/file_utils.py +57 -2
  340. autobyteus/utils/gemini_helper.py +64 -0
  341. autobyteus/utils/gemini_model_mapping.py +71 -0
  342. autobyteus/utils/llm_output_formatter.py +75 -0
  343. autobyteus/utils/tool_call_format.py +36 -0
  344. autobyteus/workflow/agentic_workflow.py +3 -3
  345. autobyteus/workflow/bootstrap_steps/agent_tool_injection_step.py +2 -2
  346. autobyteus/workflow/bootstrap_steps/base_workflow_bootstrap_step.py +2 -2
  347. autobyteus/workflow/bootstrap_steps/coordinator_initialization_step.py +2 -2
  348. autobyteus/workflow/bootstrap_steps/coordinator_prompt_preparation_step.py +3 -9
  349. autobyteus/workflow/bootstrap_steps/workflow_bootstrapper.py +6 -6
  350. autobyteus/workflow/bootstrap_steps/workflow_runtime_queue_initialization_step.py +2 -2
  351. autobyteus/workflow/context/workflow_context.py +3 -3
  352. autobyteus/workflow/context/workflow_runtime_state.py +5 -5
  353. autobyteus/workflow/events/workflow_event_dispatcher.py +5 -5
  354. autobyteus/workflow/handlers/lifecycle_workflow_event_handler.py +3 -3
  355. autobyteus/workflow/handlers/process_user_message_event_handler.py +5 -5
  356. autobyteus/workflow/handlers/tool_approval_workflow_event_handler.py +2 -2
  357. autobyteus/workflow/runtime/workflow_runtime.py +8 -8
  358. autobyteus/workflow/runtime/workflow_worker.py +3 -3
  359. autobyteus/workflow/status/__init__.py +11 -0
  360. autobyteus/workflow/status/workflow_status.py +19 -0
  361. autobyteus/workflow/status/workflow_status_manager.py +48 -0
  362. autobyteus/workflow/streaming/__init__.py +2 -2
  363. autobyteus/workflow/streaming/workflow_event_notifier.py +7 -7
  364. autobyteus/workflow/streaming/workflow_stream_event_payloads.py +4 -4
  365. autobyteus/workflow/streaming/workflow_stream_events.py +3 -3
  366. autobyteus/workflow/utils/wait_for_idle.py +4 -4
  367. autobyteus-1.3.0.dist-info/METADATA +293 -0
  368. autobyteus-1.3.0.dist-info/RECORD +606 -0
  369. {autobyteus-1.2.1.dist-info → autobyteus-1.3.0.dist-info}/WHEEL +1 -1
  370. {autobyteus-1.2.1.dist-info → autobyteus-1.3.0.dist-info}/top_level.txt +0 -1
  371. autobyteus/agent/bootstrap_steps/agent_runtime_queue_initialization_step.py +0 -57
  372. autobyteus/agent/hooks/__init__.py +0 -16
  373. autobyteus/agent/hooks/base_phase_hook.py +0 -78
  374. autobyteus/agent/hooks/hook_definition.py +0 -36
  375. autobyteus/agent/hooks/hook_meta.py +0 -37
  376. autobyteus/agent/hooks/hook_registry.py +0 -106
  377. autobyteus/agent/llm_response_processor/provider_aware_tool_usage_processor.py +0 -103
  378. autobyteus/agent/phases/__init__.py +0 -18
  379. autobyteus/agent/phases/discover.py +0 -53
  380. autobyteus/agent/phases/manager.py +0 -265
  381. autobyteus/agent/phases/transition_decorator.py +0 -40
  382. autobyteus/agent/phases/transition_info.py +0 -33
  383. autobyteus/agent/remote_agent.py +0 -244
  384. autobyteus/agent/workspace/workspace_definition.py +0 -36
  385. autobyteus/agent/workspace/workspace_meta.py +0 -37
  386. autobyteus/agent/workspace/workspace_registry.py +0 -72
  387. autobyteus/agent_team/bootstrap_steps/agent_team_runtime_queue_initialization_step.py +0 -25
  388. autobyteus/agent_team/bootstrap_steps/coordinator_prompt_preparation_step.py +0 -85
  389. autobyteus/agent_team/phases/__init__.py +0 -11
  390. autobyteus/agent_team/phases/agent_team_operational_phase.py +0 -19
  391. autobyteus/agent_team/phases/agent_team_phase_manager.py +0 -48
  392. autobyteus/llm/api/bedrock_llm.py +0 -92
  393. autobyteus/llm/api/groq_llm.py +0 -94
  394. autobyteus/llm/api/nvidia_llm.py +0 -108
  395. autobyteus/llm/utils/token_pricing_config.py +0 -87
  396. autobyteus/rpc/__init__.py +0 -73
  397. autobyteus/rpc/client/__init__.py +0 -17
  398. autobyteus/rpc/client/abstract_client_connection.py +0 -124
  399. autobyteus/rpc/client/client_connection_manager.py +0 -153
  400. autobyteus/rpc/client/sse_client_connection.py +0 -306
  401. autobyteus/rpc/client/stdio_client_connection.py +0 -280
  402. autobyteus/rpc/config/__init__.py +0 -13
  403. autobyteus/rpc/config/agent_server_config.py +0 -153
  404. autobyteus/rpc/config/agent_server_registry.py +0 -152
  405. autobyteus/rpc/hosting.py +0 -244
  406. autobyteus/rpc/protocol.py +0 -244
  407. autobyteus/rpc/server/__init__.py +0 -20
  408. autobyteus/rpc/server/agent_server_endpoint.py +0 -181
  409. autobyteus/rpc/server/base_method_handler.py +0 -40
  410. autobyteus/rpc/server/method_handlers.py +0 -259
  411. autobyteus/rpc/server/sse_server_handler.py +0 -182
  412. autobyteus/rpc/server/stdio_server_handler.py +0 -151
  413. autobyteus/rpc/server_main.py +0 -198
  414. autobyteus/rpc/transport_type.py +0 -13
  415. autobyteus/tools/bash/__init__.py +0 -2
  416. autobyteus/tools/bash/bash_executor.py +0 -100
  417. autobyteus/tools/browser/__init__.py +0 -2
  418. autobyteus/tools/browser/session_aware/browser_session_aware_navigate_to.py +0 -75
  419. autobyteus/tools/browser/session_aware/browser_session_aware_tool.py +0 -30
  420. autobyteus/tools/browser/session_aware/browser_session_aware_web_element_trigger.py +0 -154
  421. autobyteus/tools/browser/session_aware/browser_session_aware_webpage_reader.py +0 -89
  422. autobyteus/tools/browser/session_aware/browser_session_aware_webpage_screenshot_taker.py +0 -107
  423. autobyteus/tools/browser/session_aware/factory/browser_session_aware_web_element_trigger_factory.py +0 -14
  424. autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_reader_factory.py +0 -26
  425. autobyteus/tools/browser/session_aware/factory/browser_session_aware_webpage_screenshot_taker_factory.py +0 -14
  426. autobyteus/tools/browser/session_aware/shared_browser_session.py +0 -11
  427. autobyteus/tools/browser/session_aware/shared_browser_session_manager.py +0 -25
  428. autobyteus/tools/browser/session_aware/web_element_action.py +0 -20
  429. autobyteus/tools/browser/standalone/__init__.py +0 -6
  430. autobyteus/tools/browser/standalone/factory/__init__.py +0 -0
  431. autobyteus/tools/browser/standalone/factory/webpage_reader_factory.py +0 -25
  432. autobyteus/tools/browser/standalone/factory/webpage_screenshot_taker_factory.py +0 -14
  433. autobyteus/tools/browser/standalone/navigate_to.py +0 -84
  434. autobyteus/tools/browser/standalone/web_page_pdf_generator.py +0 -101
  435. autobyteus/tools/browser/standalone/webpage_image_downloader.py +0 -169
  436. autobyteus/tools/browser/standalone/webpage_reader.py +0 -105
  437. autobyteus/tools/browser/standalone/webpage_screenshot_taker.py +0 -105
  438. autobyteus/tools/file/edit_file.py +0 -200
  439. autobyteus/tools/file/list_directory.py +0 -168
  440. autobyteus/tools/file/search_files.py +0 -188
  441. autobyteus/tools/timer.py +0 -175
  442. autobyteus/tools/usage/parsers/__init__.py +0 -22
  443. autobyteus/tools/usage/parsers/_json_extractor.py +0 -99
  444. autobyteus/tools/usage/parsers/_string_decoders.py +0 -18
  445. autobyteus/tools/usage/parsers/anthropic_xml_tool_usage_parser.py +0 -10
  446. autobyteus/tools/usage/parsers/base_parser.py +0 -41
  447. autobyteus/tools/usage/parsers/default_json_tool_usage_parser.py +0 -83
  448. autobyteus/tools/usage/parsers/default_xml_tool_usage_parser.py +0 -316
  449. autobyteus/tools/usage/parsers/exceptions.py +0 -13
  450. autobyteus/tools/usage/parsers/gemini_json_tool_usage_parser.py +0 -77
  451. autobyteus/tools/usage/parsers/openai_json_tool_usage_parser.py +0 -149
  452. autobyteus/tools/usage/parsers/provider_aware_tool_usage_parser.py +0 -59
  453. autobyteus/tools/usage/registries/tool_usage_parser_registry.py +0 -62
  454. autobyteus/workflow/phases/__init__.py +0 -11
  455. autobyteus/workflow/phases/workflow_operational_phase.py +0 -19
  456. autobyteus/workflow/phases/workflow_phase_manager.py +0 -48
  457. autobyteus-1.2.1.dist-info/METADATA +0 -205
  458. autobyteus-1.2.1.dist-info/RECORD +0 -511
  459. examples/__init__.py +0 -1
  460. examples/agent_team/__init__.py +0 -1
  461. examples/discover_phase_transitions.py +0 -104
  462. examples/run_agentic_software_engineer.py +0 -239
  463. examples/run_browser_agent.py +0 -262
  464. examples/run_google_slides_agent.py +0 -287
  465. examples/run_mcp_browser_client.py +0 -174
  466. examples/run_mcp_google_slides_client.py +0 -270
  467. examples/run_mcp_list_tools.py +0 -189
  468. examples/run_poem_writer.py +0 -284
  469. examples/run_sqlite_agent.py +0 -295
  470. /autobyteus/{tools/browser/session_aware → skills}/__init__.py +0 -0
  471. /autobyteus/tools/{browser/session_aware/factory → skill}/__init__.py +0 -0
  472. {autobyteus-1.2.1.dist-info → autobyteus-1.3.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,79 @@
1
+ from dataclasses import dataclass, field
2
+ from typing import Any, Dict, List, Optional
3
+
4
+ from .memory_types import MemoryType
5
+
6
+
7
+ @dataclass
8
+ class RawTraceItem:
9
+ id: str
10
+ ts: float
11
+ turn_id: str
12
+ seq: int
13
+ trace_type: str
14
+ content: str
15
+ source_event: str
16
+ media: Optional[Dict[str, List[str]]] = None
17
+ tool_name: Optional[str] = None
18
+ tool_call_id: Optional[str] = None
19
+ tool_args: Optional[Dict[str, Any]] = None
20
+ tool_result: Optional[Any] = None
21
+ tool_error: Optional[str] = None
22
+ correlation_id: Optional[str] = None
23
+ tags: List[str] = field(default_factory=list)
24
+ tool_result_ref: Optional[str] = None
25
+
26
+ @property
27
+ def memory_type(self) -> MemoryType:
28
+ return MemoryType.RAW_TRACE
29
+
30
+ def to_dict(self) -> Dict[str, Any]:
31
+ data: Dict[str, Any] = {
32
+ "id": self.id,
33
+ "ts": self.ts,
34
+ "turn_id": self.turn_id,
35
+ "seq": self.seq,
36
+ "trace_type": self.trace_type,
37
+ "content": self.content,
38
+ "source_event": self.source_event,
39
+ }
40
+ if self.media is not None:
41
+ data["media"] = self.media
42
+ if self.tool_name is not None:
43
+ data["tool_name"] = self.tool_name
44
+ if self.tool_call_id is not None:
45
+ data["tool_call_id"] = self.tool_call_id
46
+ if self.tool_args is not None:
47
+ data["tool_args"] = self.tool_args
48
+ if self.tool_result is not None:
49
+ data["tool_result"] = self.tool_result
50
+ if self.tool_error is not None:
51
+ data["tool_error"] = self.tool_error
52
+ if self.correlation_id is not None:
53
+ data["correlation_id"] = self.correlation_id
54
+ if self.tags:
55
+ data["tags"] = self.tags
56
+ if self.tool_result_ref is not None:
57
+ data["tool_result_ref"] = self.tool_result_ref
58
+ return data
59
+
60
+ @classmethod
61
+ def from_dict(cls, data: Dict[str, Any]) -> "RawTraceItem":
62
+ return cls(
63
+ id=data["id"],
64
+ ts=data["ts"],
65
+ turn_id=data["turn_id"],
66
+ seq=data["seq"],
67
+ trace_type=data["trace_type"],
68
+ content=data.get("content", ""),
69
+ source_event=data["source_event"],
70
+ media=data.get("media"),
71
+ tool_name=data.get("tool_name"),
72
+ tool_call_id=data.get("tool_call_id"),
73
+ tool_args=data.get("tool_args"),
74
+ tool_result=data.get("tool_result"),
75
+ tool_error=data.get("tool_error"),
76
+ correlation_id=data.get("correlation_id"),
77
+ tags=data.get("tags", []),
78
+ tool_result_ref=data.get("tool_result_ref"),
79
+ )
@@ -0,0 +1,41 @@
1
+ from dataclasses import dataclass, field
2
+ from typing import Any, Dict, List
3
+
4
+ from .memory_types import MemoryType
5
+
6
+
7
+ @dataclass
8
+ class SemanticItem:
9
+ id: str
10
+ ts: float
11
+ fact: str
12
+ tags: List[str] = field(default_factory=list)
13
+ confidence: float = 0.0
14
+ salience: float = 0.0
15
+
16
+ @property
17
+ def memory_type(self) -> MemoryType:
18
+ return MemoryType.SEMANTIC
19
+
20
+ def to_dict(self) -> Dict[str, Any]:
21
+ data: Dict[str, Any] = {
22
+ "id": self.id,
23
+ "ts": self.ts,
24
+ "fact": self.fact,
25
+ "confidence": self.confidence,
26
+ "salience": self.salience,
27
+ }
28
+ if self.tags:
29
+ data["tags"] = self.tags
30
+ return data
31
+
32
+ @classmethod
33
+ def from_dict(cls, data: Dict[str, Any]) -> "SemanticItem":
34
+ return cls(
35
+ id=data["id"],
36
+ ts=data["ts"],
37
+ fact=data.get("fact", ""),
38
+ tags=data.get("tags", []),
39
+ confidence=data.get("confidence", 0.0),
40
+ salience=data.get("salience", 0.0),
41
+ )
@@ -0,0 +1,20 @@
1
+ from dataclasses import dataclass
2
+ from enum import Enum
3
+ from typing import Any, Optional, Dict
4
+
5
+
6
+ class ToolInteractionStatus(Enum):
7
+ PENDING = "pending"
8
+ SUCCESS = "success"
9
+ ERROR = "error"
10
+
11
+
12
+ @dataclass
13
+ class ToolInteraction:
14
+ tool_call_id: str
15
+ turn_id: Optional[str]
16
+ tool_name: Optional[str]
17
+ arguments: Optional[Dict[str, Any]]
18
+ result: Optional[Any]
19
+ error: Optional[str]
20
+ status: ToolInteractionStatus
@@ -0,0 +1,27 @@
1
+ import os
2
+ from pathlib import Path
3
+ from typing import Mapping, Optional, Union
4
+
5
+
6
+ def resolve_memory_base_dir(
7
+ override_dir: Optional[str] = None,
8
+ env: Optional[Mapping[str, str]] = None,
9
+ fallback_dir: Optional[Union[str, Path]] = None,
10
+ ) -> str:
11
+ override_value = override_dir.strip() if override_dir else ""
12
+ if override_value:
13
+ return override_value
14
+
15
+ env_values = env if env is not None else os.environ
16
+ env_value = env_values.get("AUTOBYTEUS_MEMORY_DIR", "").strip()
17
+ if env_value:
18
+ return env_value
19
+
20
+ if fallback_dir is not None:
21
+ return str(fallback_dir)
22
+
23
+ return str(Path.cwd() / "memory")
24
+
25
+
26
+ def resolve_agent_memory_dir(base_dir: Union[str, Path], agent_id: str) -> str:
27
+ return str(Path(base_dir) / "agents" / agent_id)
@@ -0,0 +1,5 @@
1
+ from autobyteus.memory.policies.compaction_policy import CompactionPolicy
2
+
3
+ __all__ = [
4
+ "CompactionPolicy",
5
+ ]
@@ -0,0 +1,16 @@
1
+ from dataclasses import dataclass
2
+
3
+
4
+ @dataclass
5
+ class CompactionPolicy:
6
+ trigger_ratio: float = 0.8
7
+ raw_tail_turns: int = 4
8
+ max_item_chars: int = 2000
9
+ safety_margin_tokens: int = 256
10
+
11
+ def should_compact(self, prompt_tokens: int, input_budget: int) -> bool:
12
+ if input_budget <= 0:
13
+ return True
14
+ if prompt_tokens >= input_budget:
15
+ return True
16
+ return prompt_tokens >= int(self.trigger_ratio * input_budget)
@@ -0,0 +1 @@
1
+ # restore package
@@ -0,0 +1,61 @@
1
+ from dataclasses import dataclass
2
+ from typing import Optional
3
+
4
+ from autobyteus.memory.working_context_snapshot_serializer import WorkingContextSnapshotSerializer
5
+ from autobyteus.memory.compaction_snapshot_builder import CompactionSnapshotBuilder
6
+ from autobyteus.memory.store.working_context_snapshot_store import WorkingContextSnapshotStore
7
+
8
+
9
+ @dataclass
10
+ class WorkingContextSnapshotBootstrapOptions:
11
+ max_episodic: int = 3
12
+ max_semantic: int = 20
13
+ raw_tail_turns: Optional[int] = None
14
+
15
+
16
+ class WorkingContextSnapshotBootstrapper:
17
+ def __init__(
18
+ self,
19
+ working_context_snapshot_store: Optional[WorkingContextSnapshotStore] = None,
20
+ snapshot_builder: Optional[CompactionSnapshotBuilder] = None,
21
+ ) -> None:
22
+ self.working_context_snapshot_store = working_context_snapshot_store
23
+ self.snapshot_builder = snapshot_builder or CompactionSnapshotBuilder()
24
+
25
+ def bootstrap(self, memory_manager, system_prompt: str, options: WorkingContextSnapshotBootstrapOptions) -> None:
26
+ store = self._resolve_store(memory_manager)
27
+ agent_id = self._resolve_agent_id(memory_manager, store)
28
+
29
+ if store and agent_id and store.exists(agent_id):
30
+ payload = store.read(agent_id)
31
+ if payload and WorkingContextSnapshotSerializer.validate(payload):
32
+ snapshot, _meta = WorkingContextSnapshotSerializer.deserialize(payload)
33
+ memory_manager.reset_working_context_snapshot(snapshot.build_messages())
34
+ return
35
+
36
+ bundle = memory_manager.retriever.retrieve(
37
+ max_episodic=options.max_episodic,
38
+ max_semantic=options.max_semantic,
39
+ )
40
+ tail_turns = options.raw_tail_turns
41
+ if tail_turns is None:
42
+ policy = getattr(memory_manager, "compaction_policy", None)
43
+ tail_turns = getattr(policy, "raw_tail_turns", 0) if policy else 0
44
+ raw_tail = memory_manager.get_raw_tail(tail_turns or 0, exclude_turn_id=None)
45
+ snapshot_messages = self.snapshot_builder.build(
46
+ system_prompt=system_prompt,
47
+ bundle=bundle,
48
+ raw_tail=raw_tail,
49
+ )
50
+ memory_manager.reset_working_context_snapshot(snapshot_messages)
51
+
52
+ def _resolve_store(self, memory_manager) -> Optional[WorkingContextSnapshotStore]:
53
+ if self.working_context_snapshot_store is not None:
54
+ return self.working_context_snapshot_store
55
+ return getattr(memory_manager, "working_context_snapshot_store", None)
56
+
57
+ def _resolve_agent_id(self, memory_manager, store: Optional[WorkingContextSnapshotStore]) -> Optional[str]:
58
+ if store and getattr(store, "agent_id", None):
59
+ return store.agent_id
60
+ store_obj = getattr(memory_manager, "store", None)
61
+ return getattr(store_obj, "agent_id", None)
@@ -0,0 +1,7 @@
1
+ from autobyteus.memory.retrieval.memory_bundle import MemoryBundle
2
+ from autobyteus.memory.retrieval.retriever import Retriever
3
+
4
+ __all__ = [
5
+ "MemoryBundle",
6
+ "Retriever",
7
+ ]
@@ -0,0 +1,11 @@
1
+ from dataclasses import dataclass, field
2
+ from typing import List
3
+
4
+ from autobyteus.memory.models.episodic_item import EpisodicItem
5
+ from autobyteus.memory.models.semantic_item import SemanticItem
6
+
7
+
8
+ @dataclass
9
+ class MemoryBundle:
10
+ episodic: List[EpisodicItem] = field(default_factory=list)
11
+ semantic: List[SemanticItem] = field(default_factory=list)
@@ -0,0 +1,13 @@
1
+ from autobyteus.memory.models.memory_types import MemoryType
2
+ from autobyteus.memory.retrieval.memory_bundle import MemoryBundle
3
+ from autobyteus.memory.store.base_store import MemoryStore
4
+
5
+
6
+ class Retriever:
7
+ def __init__(self, store: MemoryStore):
8
+ self.store = store
9
+
10
+ def retrieve(self, max_episodic: int, max_semantic: int) -> MemoryBundle:
11
+ episodic = self.store.list(MemoryType.EPISODIC, limit=max_episodic)
12
+ semantic = self.store.list(MemoryType.SEMANTIC, limit=max_semantic)
13
+ return MemoryBundle(episodic=episodic, semantic=semantic)
@@ -0,0 +1,9 @@
1
+ from autobyteus.memory.store.base_store import MemoryStore
2
+ from autobyteus.memory.store.file_store import FileMemoryStore
3
+ from autobyteus.memory.store.working_context_snapshot_store import WorkingContextSnapshotStore
4
+
5
+ __all__ = [
6
+ "MemoryStore",
7
+ "FileMemoryStore",
8
+ "WorkingContextSnapshotStore",
9
+ ]
@@ -0,0 +1,14 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Iterable, List, Optional
3
+
4
+ from autobyteus.memory.models.memory_types import MemoryType
5
+
6
+
7
+ class MemoryStore(ABC):
8
+ @abstractmethod
9
+ def add(self, items: Iterable[object]) -> None:
10
+ raise NotImplementedError
11
+
12
+ @abstractmethod
13
+ def list(self, memory_type: MemoryType, limit: Optional[int] = None) -> List[object]:
14
+ raise NotImplementedError
@@ -0,0 +1,98 @@
1
+ import json
2
+ from pathlib import Path
3
+ from typing import Iterable, List, Optional, Union
4
+
5
+ from autobyteus.memory.models.memory_types import MemoryType
6
+ from autobyteus.memory.models.raw_trace_item import RawTraceItem
7
+ from autobyteus.memory.models.episodic_item import EpisodicItem
8
+ from autobyteus.memory.models.semantic_item import SemanticItem
9
+ from autobyteus.memory.store.base_store import MemoryStore
10
+
11
+
12
+ class FileMemoryStore(MemoryStore):
13
+ def __init__(self, base_dir: Union[str, Path], agent_id: str):
14
+ self.base_dir = Path(base_dir)
15
+ self.agent_id = agent_id
16
+ self.agent_dir = self.base_dir / "agents" / agent_id
17
+ self.agent_dir.mkdir(parents=True, exist_ok=True)
18
+
19
+ def add(self, items: Iterable[object]) -> None:
20
+ for item in items:
21
+ memory_type = getattr(item, "memory_type", None)
22
+ if memory_type is None:
23
+ raise ValueError("Memory item missing memory_type")
24
+ path = self._get_file_path(memory_type)
25
+ record = item.to_dict() if hasattr(item, "to_dict") else item
26
+ with path.open("a", encoding="utf-8") as handle:
27
+ handle.write(json.dumps(record) + "\n")
28
+
29
+ def list(self, memory_type: MemoryType, limit: Optional[int] = None) -> List[object]:
30
+ path = self._get_file_path(memory_type)
31
+ if not path.exists():
32
+ return []
33
+ with path.open("r", encoding="utf-8") as handle:
34
+ lines = [line.strip() for line in handle.readlines() if line.strip()]
35
+ if limit is not None:
36
+ lines = lines[-limit:]
37
+ return [self._deserialize(memory_type, json.loads(line)) for line in lines]
38
+
39
+ def list_raw_trace_dicts(self) -> List[dict]:
40
+ path = self._get_file_path(MemoryType.RAW_TRACE)
41
+ if not path.exists():
42
+ return []
43
+ with path.open("r", encoding="utf-8") as handle:
44
+ return [json.loads(line) for line in handle if line.strip()]
45
+
46
+ def read_archive_raw_traces(self) -> List[dict]:
47
+ path = self._get_archive_path()
48
+ if not path.exists():
49
+ return []
50
+ with path.open("r", encoding="utf-8") as handle:
51
+ return [json.loads(line) for line in handle if line.strip()]
52
+
53
+ def prune_raw_traces(self, keep_turn_ids: set[str], archive: bool = True) -> None:
54
+ raw_items = self.list_raw_trace_dicts()
55
+ if not raw_items:
56
+ return
57
+
58
+ keep = []
59
+ removed = []
60
+ for item in raw_items:
61
+ if item.get("turn_id") in keep_turn_ids:
62
+ keep.append(item)
63
+ else:
64
+ removed.append(item)
65
+
66
+ raw_path = self._get_file_path(MemoryType.RAW_TRACE)
67
+ tmp_path = raw_path.with_suffix(".jsonl.tmp")
68
+ with tmp_path.open("w", encoding="utf-8") as handle:
69
+ for item in keep:
70
+ handle.write(json.dumps(item) + "\n")
71
+ tmp_path.replace(raw_path)
72
+
73
+ if archive and removed:
74
+ archive_path = self._get_archive_path()
75
+ with archive_path.open("a", encoding="utf-8") as handle:
76
+ for item in removed:
77
+ handle.write(json.dumps(item) + "\n")
78
+
79
+ def _get_file_path(self, memory_type: MemoryType) -> Path:
80
+ if memory_type == MemoryType.RAW_TRACE:
81
+ return self.agent_dir / "raw_traces.jsonl"
82
+ if memory_type == MemoryType.EPISODIC:
83
+ return self.agent_dir / "episodic.jsonl"
84
+ if memory_type == MemoryType.SEMANTIC:
85
+ return self.agent_dir / "semantic.jsonl"
86
+ raise ValueError(f"Unknown memory type: {memory_type}")
87
+
88
+ def _deserialize(self, memory_type: MemoryType, data: dict) -> object:
89
+ if memory_type == MemoryType.RAW_TRACE:
90
+ return RawTraceItem.from_dict(data)
91
+ if memory_type == MemoryType.EPISODIC:
92
+ return EpisodicItem.from_dict(data)
93
+ if memory_type == MemoryType.SEMANTIC:
94
+ return SemanticItem.from_dict(data)
95
+ raise ValueError(f"Unknown memory type: {memory_type}")
96
+
97
+ def _get_archive_path(self) -> Path:
98
+ return self.agent_dir / "raw_traces_archive.jsonl"
@@ -0,0 +1,28 @@
1
+ import json
2
+ from pathlib import Path
3
+ from typing import Optional, Union, Dict, Any
4
+
5
+
6
+ class WorkingContextSnapshotStore:
7
+ def __init__(self, base_dir: Union[str, Path], agent_id: str) -> None:
8
+ self.base_dir = Path(base_dir)
9
+ self.agent_id = agent_id
10
+
11
+ def exists(self, agent_id: str) -> bool:
12
+ return self._get_path(agent_id).exists()
13
+
14
+ def read(self, agent_id: str) -> Optional[Dict[str, Any]]:
15
+ path = self._get_path(agent_id)
16
+ if not path.exists():
17
+ return None
18
+ with path.open("r", encoding="utf-8") as handle:
19
+ return json.load(handle)
20
+
21
+ def write(self, agent_id: str, payload: Dict[str, Any]) -> None:
22
+ path = self._get_path(agent_id)
23
+ path.parent.mkdir(parents=True, exist_ok=True)
24
+ with path.open("w", encoding="utf-8") as handle:
25
+ json.dump(payload, handle)
26
+
27
+ def _get_path(self, agent_id: str) -> Path:
28
+ return self.base_dir / "agents" / agent_id / "working_context_snapshot.json"
@@ -0,0 +1,46 @@
1
+ from typing import Dict, List
2
+
3
+ from autobyteus.memory.models.raw_trace_item import RawTraceItem
4
+ from autobyteus.memory.models.tool_interaction import ToolInteraction, ToolInteractionStatus
5
+
6
+
7
+ def build_tool_interactions(raw_traces: List[RawTraceItem]) -> List[ToolInteraction]:
8
+ interactions: Dict[str, ToolInteraction] = {}
9
+
10
+ for trace in raw_traces:
11
+ if trace.trace_type not in {"tool_call", "tool_result"}:
12
+ continue
13
+
14
+ tool_call_id = trace.tool_call_id
15
+ if not tool_call_id:
16
+ continue
17
+
18
+ interaction = interactions.get(tool_call_id)
19
+ if interaction is None:
20
+ interaction = ToolInteraction(
21
+ tool_call_id=tool_call_id,
22
+ turn_id=trace.turn_id,
23
+ tool_name=trace.tool_name,
24
+ arguments=None,
25
+ result=None,
26
+ error=None,
27
+ status=ToolInteractionStatus.PENDING,
28
+ )
29
+ interactions[tool_call_id] = interaction
30
+
31
+ if trace.trace_type == "tool_call":
32
+ interaction.tool_name = trace.tool_name
33
+ interaction.arguments = trace.tool_args
34
+ if interaction.status == ToolInteractionStatus.PENDING and interaction.error:
35
+ interaction.status = ToolInteractionStatus.ERROR
36
+ continue
37
+
38
+ if trace.trace_type == "tool_result":
39
+ interaction.tool_name = trace.tool_name or interaction.tool_name
40
+ interaction.result = trace.tool_result
41
+ interaction.error = trace.tool_error
42
+ interaction.status = (
43
+ ToolInteractionStatus.ERROR if trace.tool_error else ToolInteractionStatus.SUCCESS
44
+ )
45
+
46
+ return list(interactions.values())
@@ -0,0 +1,9 @@
1
+ class TurnTracker:
2
+ def __init__(self, start: int = 1):
3
+ if start < 1:
4
+ raise ValueError("start must be >= 1")
5
+ self._counter = start - 1
6
+
7
+ def next_turn_id(self) -> str:
8
+ self._counter += 1
9
+ return f"turn_{self._counter:04d}"
@@ -0,0 +1,69 @@
1
+ import time
2
+ from typing import List, Optional, Iterable, Any
3
+
4
+ from autobyteus.llm.utils.messages import (
5
+ Message,
6
+ MessageRole,
7
+ ToolCallPayload,
8
+ ToolCallSpec,
9
+ ToolResultPayload,
10
+ )
11
+
12
+
13
+ class WorkingContextSnapshot:
14
+ def __init__(self, initial_messages: Optional[Iterable[Message]] = None):
15
+ self._messages: List[Message] = list(initial_messages) if initial_messages else []
16
+ self.epoch_id: int = 1
17
+ self.last_compaction_ts: Optional[float] = None
18
+
19
+ def append_message(self, message: Message) -> None:
20
+ self._messages.append(message)
21
+
22
+ def append_user(self, content: str) -> None:
23
+ self._messages.append(Message(role=MessageRole.USER, content=content))
24
+
25
+ def append_assistant(self, content: Optional[str], reasoning: Optional[str] = None) -> None:
26
+ self._messages.append(
27
+ Message(
28
+ role=MessageRole.ASSISTANT,
29
+ content=content,
30
+ reasoning_content=reasoning,
31
+ )
32
+ )
33
+
34
+ def append_tool_calls(self, tool_calls: List[ToolCallSpec]) -> None:
35
+ self._messages.append(
36
+ Message(
37
+ role=MessageRole.ASSISTANT,
38
+ content=None,
39
+ tool_payload=ToolCallPayload(tool_calls=tool_calls),
40
+ )
41
+ )
42
+
43
+ def append_tool_result(
44
+ self,
45
+ tool_call_id: str,
46
+ tool_name: str,
47
+ tool_result: Any,
48
+ tool_error: Optional[str] = None,
49
+ ) -> None:
50
+ self._messages.append(
51
+ Message(
52
+ role=MessageRole.TOOL,
53
+ content=None,
54
+ tool_payload=ToolResultPayload(
55
+ tool_call_id=tool_call_id,
56
+ tool_name=tool_name,
57
+ tool_result=tool_result,
58
+ tool_error=tool_error,
59
+ ),
60
+ )
61
+ )
62
+
63
+ def build_messages(self) -> List[Message]:
64
+ return list(self._messages)
65
+
66
+ def reset(self, snapshot_messages: Iterable[Message], last_compaction_ts: Optional[float] = None) -> None:
67
+ self._messages = list(snapshot_messages)
68
+ self.epoch_id += 1
69
+ self.last_compaction_ts = last_compaction_ts if last_compaction_ts is not None else time.time()