voidx 3.7.5__tar.gz → 3.8.0__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.
- voidx-3.8.0/PKG-INFO +119 -0
- voidx-3.8.0/pyproject.toml +65 -0
- voidx-3.8.0/src/tests/test_agent/application/test_services.py +187 -0
- voidx-3.8.0/src/tests/test_agent/domain/test_compaction.py +53 -0
- voidx-3.8.0/src/tests/test_agent/domain/test_events.py +12 -0
- voidx-3.8.0/src/tests/test_agent/domain/test_import_boundaries.py +53 -0
- voidx-3.8.0/src/tests/test_agent/domain/test_persistence_mapper.py +48 -0
- voidx-3.8.0/src/tests/test_agent/domain/test_state.py +42 -0
- voidx-3.8.0/src/tests/test_agent/graph/run_loop_helpers.py +158 -0
- voidx-3.8.0/src/tests/test_agent/graph/stream_llm_helpers.py +272 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_call_llm_compaction.py +843 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_call_llm_compaction_advanced.py +252 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_call_llm_structure.py +12 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_call_llm_tools.py +451 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_compaction_flow.py +462 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_compaction_flow_run_once.py +370 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_convergence.py +74 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_execute_tools_guard.py +1807 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_execute_tools_todo.py +439 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_graph_authorization.py +1277 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_graph_setup_prompts.py +352 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_guards_tool_op.py +305 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_parallel_subagents.py +420 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_parallel_subagents_dedup.py +391 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_prepare_workflow.py +398 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_run_loop_startup.py +678 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_run_loop_title_lsp.py +160 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_run_loop_title_misc.py +178 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_run_loop_workflow.py +172 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_run_loop_workflow_advanced.py +144 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_runtime_guards.py +431 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_session_messages.py +468 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_session_persistence.py +644 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_session_run_once.py +429 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_session_runtime_state.py +406 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_stream_llm_sanitization.py +527 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_subagent_llm_retry.py +306 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_subagent_persistence.py +389 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_subagent_runner.py +427 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_subagent_step_budget.py +375 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_subagent_step_budget_convergence.py +360 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_subagent_step_budget_final.py +511 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_todo_events.py +290 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_tool_execution_auth.py +422 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_tool_result_preview.py +248 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_turn_control_e2e.py +255 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_turn_control_integration.py +776 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_turn_runner_guidance_discard.py +138 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_turn_runner_idle_event.py +11 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_turn_stop_without_pending.py +236 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_workflow_done.py +316 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_workflow_review.py +319 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_workflow_transactions.py +315 -0
- voidx-3.8.0/src/tests/test_agent/graph/test_workflow_transactions_barrier.py +352 -0
- voidx-3.8.0/src/tests/test_agent/infrastructure/langgraph/test_adapter.py +101 -0
- voidx-3.8.0/src/tests/test_agent/infrastructure/langgraph/test_graph_wiring.py +68 -0
- voidx-3.8.0/src/tests/test_agent/slash/context.py +58 -0
- voidx-3.8.0/src/tests/test_agent/slash/test_slash_init.py +98 -0
- voidx-3.8.0/src/tests/test_agent/slash/test_slash_loop.py +83 -0
- voidx-3.8.0/src/tests/test_agent/slash/test_slash_mcp.py +228 -0
- voidx-3.8.0/src/tests/test_agent/slash/test_slash_model.py +761 -0
- voidx-3.8.0/src/tests/test_agent/slash/test_slash_model_advanced.py +463 -0
- voidx-3.8.0/src/tests/test_agent/slash/test_slash_session.py +458 -0
- voidx-3.8.0/src/tests/test_agent/slash/test_slash_skills.py +99 -0
- voidx-3.8.0/src/tests/test_agent/slash/test_slash_tavily.py +194 -0
- voidx-3.8.0/src/tests/test_agent/slash/test_slash_upgrade.py +109 -0
- voidx-3.8.0/src/tests/test_agent/test_composition.py +26 -0
- voidx-3.8.0/src/tests/test_agent/test_dependency_cycles.py +135 -0
- voidx-3.8.0/src/tests/test_agent/test_file_rwlock.py +581 -0
- voidx-3.8.0/src/tests/test_agent/test_goal_resolver.py +722 -0
- voidx-3.8.0/src/tests/test_agent/test_goal_resolver_advanced.py +455 -0
- voidx-3.8.0/src/tests/test_agent/test_guard_guidance.py +70 -0
- voidx-3.8.0/src/tests/test_agent/test_guide_command.py +110 -0
- voidx-3.8.0/src/tests/test_agent/test_module_boundaries.py +362 -0
- voidx-3.8.0/src/tests/test_agent/test_permission.py +575 -0
- voidx-3.8.0/src/tests/test_agent/test_permission_phase2.py +455 -0
- voidx-3.8.0/src/tests/test_agent/test_permission_phase3.py +421 -0
- voidx-3.8.0/src/tests/test_agent/test_permission_phase6.py +390 -0
- voidx-3.8.0/src/tests/test_agent/test_prompts.py +140 -0
- voidx-3.8.0/src/tests/test_agent/test_runtime_context_builder.py +595 -0
- voidx-3.8.0/src/tests/test_agent/test_runtime_context_prompts.py +40 -0
- voidx-3.8.0/src/tests/test_agent/test_runtime_context_skill_stripping.py +288 -0
- voidx-3.8.0/src/tests/test_agent/test_task_state.py +225 -0
- voidx-3.8.0/src/tests/test_agent/test_task_state_context_sync.py +93 -0
- voidx-3.8.0/src/tests/test_agent/test_task_state_rendering.py +231 -0
- voidx-3.8.0/src/tests/test_agent/test_tool_exchange_sanitizer.py +166 -0
- voidx-3.8.0/src/tests/test_agent/test_turn_control.py +262 -0
- voidx-3.8.0/src/tests/test_agent/test_turn_control_prompt.py +70 -0
- voidx-3.8.0/src/tests/test_agent/test_turn_metrics.py +74 -0
- voidx-3.8.0/src/tests/test_agent/test_turn_start.py +159 -0
- voidx-3.8.0/src/tests/test_config/test_config.py +417 -0
- voidx-3.8.0/src/tests/test_llm/test_compaction_retry.py +506 -0
- voidx-3.8.0/src/tests/test_llm/test_instruction_cache.py +136 -0
- voidx-3.8.0/src/tests/test_llm/test_llm_provider.py +616 -0
- voidx-3.8.0/src/tests/test_llm/test_llm_provider_advanced.py +428 -0
- voidx-3.8.0/src/tests/test_llm/test_provider_registry_integration.py +114 -0
- voidx-3.8.0/src/tests/test_llm/test_prune_args.py +496 -0
- voidx-3.8.0/src/tests/test_llm/test_streaming_sanitize.py +102 -0
- voidx-3.8.0/src/tests/test_llm/test_token_counting.py +441 -0
- voidx-3.8.0/src/tests/test_lsp/test_lsp.py +649 -0
- voidx-3.8.0/src/tests/test_lsp/test_lsp_advanced.py +408 -0
- voidx-3.8.0/src/tests/test_main.py +81 -0
- voidx-3.8.0/src/tests/test_mcp/test_auto_discovery.py +82 -0
- voidx-3.8.0/src/tests/test_mcp/test_catalog.py +62 -0
- voidx-3.8.0/src/tests/test_mcp/test_context.py +134 -0
- voidx-3.8.0/src/tests/test_mcp/test_exposure.py +186 -0
- voidx-3.8.0/src/tests/test_mcp/test_gateway.py +304 -0
- voidx-3.8.0/src/tests/test_mcp/test_gateway_permissions.py +84 -0
- voidx-3.8.0/src/tests/test_mcp/test_gateway_registration.py +45 -0
- voidx-3.8.0/src/tests/test_mcp/test_manager_catalog.py +116 -0
- voidx-3.8.0/src/tests/test_mcp/test_mcp.py +596 -0
- voidx-3.8.0/src/tests/test_mcp/test_references.py +187 -0
- voidx-3.8.0/src/tests/test_mcp/test_runtime_context_stripping.py +65 -0
- voidx-3.8.0/src/tests/test_mcp/test_server_info.py +68 -0
- voidx-3.8.0/src/tests/test_mcp/test_validation.py +90 -0
- voidx-3.8.0/src/tests/test_memory/test_main_startup.py +132 -0
- voidx-3.8.0/src/tests/test_permission/test_ai_approval.py +724 -0
- voidx-3.8.0/src/tests/test_permission/test_lsp_format.py +14 -0
- voidx-3.8.0/src/tests/test_permission/test_risk.py +212 -0
- voidx-3.8.0/src/tests/test_runtime/test_execution_context.py +51 -0
- voidx-3.8.0/src/tests/test_runtime/test_goal_resolution_refactor.py +122 -0
- voidx-3.8.0/src/tests/test_skills/test_skill_references.py +349 -0
- voidx-3.8.0/src/tests/test_skills/test_workflow_advance.py +533 -0
- voidx-3.8.0/src/tests/test_tools/bash/test_auto_route_git.py +492 -0
- voidx-3.8.0/src/tests/test_tools/bash/test_router_git.py +354 -0
- voidx-3.8.0/src/tests/test_tools/bash/test_router_safety.py +105 -0
- voidx-3.8.0/src/tests/test_tools/bash/test_router_sed_grep.py +369 -0
- voidx-3.8.0/src/tests/test_tools/bash/test_tool.py +290 -0
- voidx-3.8.0/src/tests/test_tools/file/test_edit_coverage.py +240 -0
- voidx-3.8.0/src/tests/test_tools/file/test_post_edit_format.py +257 -0
- voidx-3.8.0/src/tests/test_tools/file/test_replace_format.py +67 -0
- voidx-3.8.0/src/tests/test_tools/file/test_write_file.py +545 -0
- voidx-3.8.0/src/tests/test_tools/file/test_write_format.py +98 -0
- voidx-3.8.0/src/tests/test_tools/test_clarify_tool.py +284 -0
- voidx-3.8.0/src/tests/test_tools/test_infer_state_patch.py +84 -0
- voidx-3.8.0/src/tests/test_tools/test_interactive_tools.py +483 -0
- voidx-3.8.0/src/tests/test_tools/test_interactive_tools_write.py +432 -0
- voidx-3.8.0/src/tests/test_tools/test_loop_registry.py +42 -0
- voidx-3.8.0/src/tests/test_tools/test_make_interact_callback.py +243 -0
- voidx-3.8.0/src/tests/test_tools/test_output_policy.py +4 -0
- voidx-3.8.0/src/tests/test_tools/test_plan_checkpoint.py +445 -0
- voidx-3.8.0/src/tests/test_tools/test_search.py +599 -0
- voidx-3.8.0/src/tests/test_tools/test_skills_tool.py +246 -0
- voidx-3.8.0/src/tests/test_tools/test_state_update_from_executed_tools.py +267 -0
- voidx-3.8.0/src/tests/test_tools/test_task_tracker.py +191 -0
- voidx-3.8.0/src/tests/test_tools/test_tool_error_handling.py +247 -0
- voidx-3.8.0/src/tests/test_tools/test_tool_registry.py +125 -0
- voidx-3.8.0/src/tests/test_tools/test_tool_schemas.py +285 -0
- voidx-3.8.0/src/tests/test_tools/test_tool_state_patch.py +57 -0
- voidx-3.8.0/src/tests/test_tools/test_user_interaction_models.py +58 -0
- voidx-3.8.0/src/tests/test_tools/test_workflow_tool.py +963 -0
- voidx-3.8.0/src/tests/test_ui/gateway/test_gateway_v2_dispatch.py +462 -0
- voidx-3.8.0/src/tests/test_ui/gateway/test_mcp_candidates.py +91 -0
- voidx-3.8.0/src/tests/test_ui/gateway/test_reference_candidates.py +122 -0
- voidx-3.8.0/src/tests/test_ui/gateway/test_ui_events_dock_prompts.py +530 -0
- voidx-3.8.0/src/tests/test_ui/output/test_mcp_gateway_display.py +77 -0
- voidx-3.8.0/src/tests/test_ui/protocol/test_dto.py +163 -0
- voidx-3.8.0/src/tests/test_ui/tools/test_mcp_picker.py +90 -0
- voidx-3.8.0/src/voidx/__init__.py +3 -0
- voidx-3.8.0/src/voidx/agent/__init__.py +6 -0
- voidx-3.8.0/src/voidx/agent/application/__init__.py +1 -0
- voidx-3.8.0/src/voidx/agent/application/agent_service.py +467 -0
- voidx-3.8.0/src/voidx/agent/application/compaction_service.py +44 -0
- voidx-3.8.0/src/voidx/agent/application/session_service.py +18 -0
- voidx-3.8.0/src/voidx/agent/application/tool_service.py +19 -0
- voidx-3.8.0/src/voidx/agent/application/turn_service.py +58 -0
- voidx-3.8.0/src/voidx/agent/composition.py +34 -0
- voidx-3.8.0/src/voidx/agent/domain/__init__.py +16 -0
- voidx-3.8.0/src/voidx/agent/domain/compaction.py +51 -0
- voidx-3.8.0/src/voidx/agent/domain/events.py +20 -0
- voidx-3.8.0/src/voidx/agent/domain/state.py +18 -0
- voidx-3.8.0/src/voidx/agent/domain/turn.py +30 -0
- voidx-3.8.0/src/voidx/agent/facade.py +23 -0
- voidx-3.8.0/src/voidx/agent/goal_resolver.py +568 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/__init__.py +1 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/graph_compaction.py +39 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/__init__.py +7 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/adapter.py +41 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/execution.py +1845 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/__init__.py +1 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/compaction_coordinator.py +628 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/convergence.py +87 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/core/__init__.py +1 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/core/context.py +94 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/core/helpers.py +257 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/core/turn.py +385 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/session_runtime.py +292 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/subagent.py +523 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/thread_context.py +179 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/tool_executor/__init__.py +8 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/tool_executor/executor.py +516 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/tool_executor/guards.py +151 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/tool_executor/helpers.py +740 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/tool_executor/types.py +88 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/tool_executor/workflow.py +286 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/topology.py +88 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/turn_control.py +165 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/turn_runner.py +551 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/wiring.py +118 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime/workflow_utils.py +33 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/state_mapper.py +30 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/topology.py +14 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/memory_session.py +19 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/null_events.py +8 -0
- voidx-3.8.0/src/voidx/agent/infrastructure/runtime_state_mapper.py +24 -0
- voidx-3.8.0/src/voidx/agent/ports/__init__.py +1 -0
- voidx-3.8.0/src/voidx/agent/ports/compaction.py +19 -0
- voidx-3.8.0/src/voidx/agent/ports/events.py +9 -0
- voidx-3.8.0/src/voidx/agent/ports/execution_host.py +107 -0
- voidx-3.8.0/src/voidx/agent/ports/permission.py +7 -0
- voidx-3.8.0/src/voidx/agent/ports/session.py +15 -0
- voidx-3.8.0/src/voidx/agent/ports/tools.py +17 -0
- voidx-3.8.0/src/voidx/agent/ports/turn_engine.py +18 -0
- voidx-3.8.0/src/voidx/agent/ports/workflow.py +7 -0
- voidx-3.8.0/src/voidx/agent/prompts.py +306 -0
- voidx-3.8.0/src/voidx/agent/runtime_context.py +624 -0
- voidx-3.8.0/src/voidx/agent/slash/handler.py +2346 -0
- voidx-3.8.0/src/voidx/agent/slash/runtime.py +77 -0
- voidx-3.8.0/src/voidx/agent/state.py +28 -0
- voidx-3.8.0/src/voidx/agent/todo_state.py +279 -0
- voidx-3.8.0/src/voidx/config/__init__.py +37 -0
- voidx-3.8.0/src/voidx/config/enums.py +42 -0
- voidx-3.8.0/src/voidx/config/models.py +158 -0
- voidx-3.8.0/src/voidx/config/settings.py +516 -0
- voidx-3.8.0/src/voidx/config/settings_lsp.py +17 -0
- voidx-3.8.0/src/voidx/config/settings_mcp.py +87 -0
- voidx-3.8.0/src/voidx/config/settings_permissions.py +123 -0
- voidx-3.8.0/src/voidx/data/documents/voidx-guide/README.md +17 -0
- voidx-3.8.0/src/voidx/data/documents/voidx-guide/permission.md +34 -0
- voidx-3.8.0/src/voidx/data/documents/voidx-guide/reference.md +35 -0
- voidx-3.8.0/src/voidx/llm/catalog.py +455 -0
- voidx-3.8.0/src/voidx/llm/compaction/__init__.py +91 -0
- voidx-3.8.0/src/voidx/llm/compaction/constants.py +78 -0
- voidx-3.8.0/src/voidx/llm/compaction/fallback_summary.py +221 -0
- voidx-3.8.0/src/voidx/llm/compaction/prune.py +159 -0
- voidx-3.8.0/src/voidx/llm/compaction/service.py +319 -0
- voidx-3.8.0/src/voidx/llm/context.py +46 -0
- voidx-3.8.0/src/voidx/llm/instruction.py +304 -0
- voidx-3.8.0/src/voidx/llm/provider.py +268 -0
- voidx-3.8.0/src/voidx/llm/providers/__init__.py +52 -0
- voidx-3.8.0/src/voidx/llm/providers/anthropic.py +42 -0
- voidx-3.8.0/src/voidx/llm/providers/base.py +53 -0
- voidx-3.8.0/src/voidx/llm/providers/common.py +100 -0
- voidx-3.8.0/src/voidx/llm/providers/deepseek.py +148 -0
- voidx-3.8.0/src/voidx/llm/providers/doubao.py +47 -0
- voidx-3.8.0/src/voidx/llm/providers/gemini.py +125 -0
- voidx-3.8.0/src/voidx/llm/providers/kimi.py +59 -0
- voidx-3.8.0/src/voidx/llm/providers/longcat.py +18 -0
- voidx-3.8.0/src/voidx/llm/providers/mimo.py +31 -0
- voidx-3.8.0/src/voidx/llm/providers/minimax.py +34 -0
- voidx-3.8.0/src/voidx/llm/providers/openai.py +124 -0
- voidx-3.8.0/src/voidx/llm/providers/openrouter.py +16 -0
- voidx-3.8.0/src/voidx/llm/providers/qwen.py +47 -0
- voidx-3.8.0/src/voidx/llm/providers/typex.py +19 -0
- voidx-3.8.0/src/voidx/llm/providers/xunfei.py +19 -0
- voidx-3.8.0/src/voidx/llm/providers/zhipu.py +24 -0
- voidx-3.8.0/src/voidx/llm/service.py +44 -0
- voidx-3.8.0/src/voidx/llm/thinking.py +92 -0
- voidx-3.8.0/src/voidx/lsp/errors.py +27 -0
- voidx-3.8.0/src/voidx/lsp/manager.py +468 -0
- voidx-3.8.0/src/voidx/lsp/service.py +114 -0
- voidx-3.8.0/src/voidx/main.py +167 -0
- voidx-3.8.0/src/voidx/mcp/auto.py +39 -0
- voidx-3.8.0/src/voidx/mcp/catalog.py +66 -0
- voidx-3.8.0/src/voidx/mcp/client/base.py +391 -0
- voidx-3.8.0/src/voidx/mcp/context.py +178 -0
- voidx-3.8.0/src/voidx/mcp/gateway.py +286 -0
- voidx-3.8.0/src/voidx/mcp/manager.py +349 -0
- voidx-3.8.0/src/voidx/mcp/references.py +73 -0
- voidx-3.8.0/src/voidx/mcp/schema_summary.py +76 -0
- voidx-3.8.0/src/voidx/mcp/validation.py +65 -0
- voidx-3.8.0/src/voidx/permission/ai_approval.py +513 -0
- voidx-3.8.0/src/voidx/permission/constants.py +177 -0
- voidx-3.8.0/src/voidx/permission/context.py +106 -0
- voidx-3.8.0/src/voidx/permission/engine.py +232 -0
- voidx-3.8.0/src/voidx/permission/presets.py +72 -0
- voidx-3.8.0/src/voidx/permission/rules.py +463 -0
- voidx-3.8.0/src/voidx/permission/sandbox.py +276 -0
- voidx-3.8.0/src/voidx/permission/service.py +497 -0
- voidx-3.8.0/src/voidx/permission/session_rules.py +90 -0
- voidx-3.8.0/src/voidx/permission/shell_policy.py +437 -0
- voidx-3.8.0/src/voidx/runtime/execution_context.py +33 -0
- voidx-3.8.0/src/voidx/runtime/ui.py +310 -0
- voidx-3.8.0/src/voidx/skills/references.py +77 -0
- voidx-3.8.0/src/voidx/tools/agent.py +331 -0
- voidx-3.8.0/src/voidx/tools/base.py +461 -0
- voidx-3.8.0/src/voidx/tools/bash/core.py +98 -0
- voidx-3.8.0/src/voidx/tools/bash/hint/file.py +255 -0
- voidx-3.8.0/src/voidx/tools/bash/hint/search.py +315 -0
- voidx-3.8.0/src/voidx/tools/bash/router.py +71 -0
- voidx-3.8.0/src/voidx/tools/bash/safety.py +24 -0
- voidx-3.8.0/src/voidx/tools/file/io.py +46 -0
- voidx-3.8.0/src/voidx/tools/file/post_edit.py +133 -0
- voidx-3.8.0/src/voidx/tools/file/replace.py +714 -0
- voidx-3.8.0/src/voidx/tools/file/safe_path.py +486 -0
- voidx-3.8.0/src/voidx/tools/file/state.py +505 -0
- voidx-3.8.0/src/voidx/tools/file/types.py +35 -0
- voidx-3.8.0/src/voidx/tools/file/write.py +294 -0
- voidx-3.8.0/src/voidx/tools/lsp.py +303 -0
- voidx-3.8.0/src/voidx/tools/output_policy.py +3 -0
- voidx-3.8.0/src/voidx/tools/registry.py +155 -0
- voidx-3.8.0/src/voidx/tools/search.py +330 -0
- voidx-3.8.0/src/voidx/tools/skills.py +252 -0
- voidx-3.8.0/src/voidx/tools/task_status.py +71 -0
- voidx-3.8.0/src/voidx/ui/command_catalog.py +158 -0
- voidx-3.8.0/src/voidx/ui/commands.py +114 -0
- voidx-3.8.0/src/voidx/ui/gateway/session/core.py +489 -0
- voidx-3.8.0/src/voidx/ui/gateway/session/method/integrations.py +190 -0
- voidx-3.8.0/src/voidx/ui/gateway/session/method/references.py +75 -0
- voidx-3.8.0/src/voidx/ui/gateway/session/method/settings.py +279 -0
- voidx-3.8.0/src/voidx/ui/output/dock/nodes.py +422 -0
- voidx-3.8.0/src/voidx/ui/output/events/bus.py +165 -0
- voidx-3.8.0/src/voidx/ui/output/events/consumers.py +612 -0
- voidx-3.8.0/src/voidx/ui/output/events/schema.py +371 -0
- voidx-3.8.0/src/voidx/ui/output/tool_display.py +193 -0
- voidx-3.8.0/src/voidx/ui/output/types.py +93 -0
- voidx-3.8.0/src/voidx/ui/protocol/v2/snapshot.py +45 -0
- voidx-3.8.0/src/voidx/ui/tools/mcp_picker.py +54 -0
- voidx-3.8.0/src/voidx/workflow/nodes.py +347 -0
- voidx-3.8.0/src/voidx.egg-info/PKG-INFO +119 -0
- voidx-3.8.0/src/voidx.egg-info/SOURCES.txt +703 -0
- voidx-3.8.0/src/voidx.egg-info/requires.txt +24 -0
- voidx-3.7.5/PKG-INFO +0 -118
- voidx-3.7.5/pyproject.toml +0 -64
- voidx-3.7.5/src/tests/test_agent/graph/run_loop_helpers.py +0 -107
- voidx-3.7.5/src/tests/test_agent/graph/stream_llm_helpers.py +0 -272
- voidx-3.7.5/src/tests/test_agent/graph/test_call_llm_compaction.py +0 -843
- voidx-3.7.5/src/tests/test_agent/graph/test_call_llm_compaction_advanced.py +0 -252
- voidx-3.7.5/src/tests/test_agent/graph/test_call_llm_structure.py +0 -12
- voidx-3.7.5/src/tests/test_agent/graph/test_call_llm_tools.py +0 -451
- voidx-3.7.5/src/tests/test_agent/graph/test_compaction_flow.py +0 -462
- voidx-3.7.5/src/tests/test_agent/graph/test_compaction_flow_run_once.py +0 -370
- voidx-3.7.5/src/tests/test_agent/graph/test_convergence.py +0 -74
- voidx-3.7.5/src/tests/test_agent/graph/test_execute_tools_guard.py +0 -1807
- voidx-3.7.5/src/tests/test_agent/graph/test_execute_tools_todo.py +0 -439
- voidx-3.7.5/src/tests/test_agent/graph/test_graph_authorization.py +0 -720
- voidx-3.7.5/src/tests/test_agent/graph/test_graph_setup_prompts.py +0 -352
- voidx-3.7.5/src/tests/test_agent/graph/test_guards_tool_op.py +0 -305
- voidx-3.7.5/src/tests/test_agent/graph/test_parallel_subagents.py +0 -420
- voidx-3.7.5/src/tests/test_agent/graph/test_parallel_subagents_dedup.py +0 -391
- voidx-3.7.5/src/tests/test_agent/graph/test_prepare_workflow.py +0 -402
- voidx-3.7.5/src/tests/test_agent/graph/test_run_loop_startup.py +0 -686
- voidx-3.7.5/src/tests/test_agent/graph/test_run_loop_title_lsp.py +0 -157
- voidx-3.7.5/src/tests/test_agent/graph/test_run_loop_title_misc.py +0 -178
- voidx-3.7.5/src/tests/test_agent/graph/test_run_loop_workflow.py +0 -172
- voidx-3.7.5/src/tests/test_agent/graph/test_run_loop_workflow_advanced.py +0 -144
- voidx-3.7.5/src/tests/test_agent/graph/test_runtime_guards.py +0 -431
- voidx-3.7.5/src/tests/test_agent/graph/test_session_messages.py +0 -468
- voidx-3.7.5/src/tests/test_agent/graph/test_session_persistence.py +0 -643
- voidx-3.7.5/src/tests/test_agent/graph/test_session_run_once.py +0 -429
- voidx-3.7.5/src/tests/test_agent/graph/test_session_runtime_state.py +0 -406
- voidx-3.7.5/src/tests/test_agent/graph/test_stream_llm_sanitization.py +0 -527
- voidx-3.7.5/src/tests/test_agent/graph/test_subagent_llm_retry.py +0 -306
- voidx-3.7.5/src/tests/test_agent/graph/test_subagent_persistence.py +0 -389
- voidx-3.7.5/src/tests/test_agent/graph/test_subagent_runner.py +0 -427
- voidx-3.7.5/src/tests/test_agent/graph/test_subagent_step_budget.py +0 -375
- voidx-3.7.5/src/tests/test_agent/graph/test_subagent_step_budget_convergence.py +0 -364
- voidx-3.7.5/src/tests/test_agent/graph/test_subagent_step_budget_final.py +0 -515
- voidx-3.7.5/src/tests/test_agent/graph/test_todo_events.py +0 -290
- voidx-3.7.5/src/tests/test_agent/graph/test_tool_execution_auth.py +0 -409
- voidx-3.7.5/src/tests/test_agent/graph/test_tool_result_preview.py +0 -248
- voidx-3.7.5/src/tests/test_agent/graph/test_turn_control_e2e.py +0 -255
- voidx-3.7.5/src/tests/test_agent/graph/test_turn_control_integration.py +0 -657
- voidx-3.7.5/src/tests/test_agent/graph/test_turn_runner_guidance_discard.py +0 -138
- voidx-3.7.5/src/tests/test_agent/graph/test_turn_runner_idle_event.py +0 -11
- voidx-3.7.5/src/tests/test_agent/graph/test_turn_stop_without_pending.py +0 -236
- voidx-3.7.5/src/tests/test_agent/graph/test_workflow_done.py +0 -316
- voidx-3.7.5/src/tests/test_agent/graph/test_workflow_review.py +0 -319
- voidx-3.7.5/src/tests/test_agent/graph/test_workflow_transactions.py +0 -315
- voidx-3.7.5/src/tests/test_agent/graph/test_workflow_transactions_barrier.py +0 -352
- voidx-3.7.5/src/tests/test_agent/slash/test_slash_init.py +0 -97
- voidx-3.7.5/src/tests/test_agent/slash/test_slash_loop.py +0 -82
- voidx-3.7.5/src/tests/test_agent/slash/test_slash_mcp.py +0 -185
- voidx-3.7.5/src/tests/test_agent/slash/test_slash_model.py +0 -677
- voidx-3.7.5/src/tests/test_agent/slash/test_slash_model_advanced.py +0 -462
- voidx-3.7.5/src/tests/test_agent/slash/test_slash_session.py +0 -469
- voidx-3.7.5/src/tests/test_agent/slash/test_slash_skills.py +0 -98
- voidx-3.7.5/src/tests/test_agent/slash/test_slash_tavily.py +0 -193
- voidx-3.7.5/src/tests/test_agent/slash/test_slash_upgrade.py +0 -108
- voidx-3.7.5/src/tests/test_agent/test_file_rwlock.py +0 -581
- voidx-3.7.5/src/tests/test_agent/test_goal_resolver.py +0 -721
- voidx-3.7.5/src/tests/test_agent/test_goal_resolver_advanced.py +0 -455
- voidx-3.7.5/src/tests/test_agent/test_guard_guidance.py +0 -70
- voidx-3.7.5/src/tests/test_agent/test_guide_command.py +0 -110
- voidx-3.7.5/src/tests/test_agent/test_module_boundaries.py +0 -240
- voidx-3.7.5/src/tests/test_agent/test_permission.py +0 -558
- voidx-3.7.5/src/tests/test_agent/test_permission_phase2.py +0 -455
- voidx-3.7.5/src/tests/test_agent/test_permission_phase3.py +0 -399
- voidx-3.7.5/src/tests/test_agent/test_permission_phase6.py +0 -324
- voidx-3.7.5/src/tests/test_agent/test_prompts.py +0 -130
- voidx-3.7.5/src/tests/test_agent/test_runtime_context_builder.py +0 -595
- voidx-3.7.5/src/tests/test_agent/test_runtime_context_prompts.py +0 -40
- voidx-3.7.5/src/tests/test_agent/test_runtime_context_skill_stripping.py +0 -288
- voidx-3.7.5/src/tests/test_agent/test_task_state.py +0 -225
- voidx-3.7.5/src/tests/test_agent/test_task_state_context_sync.py +0 -93
- voidx-3.7.5/src/tests/test_agent/test_task_state_rendering.py +0 -231
- voidx-3.7.5/src/tests/test_agent/test_tool_exchange_sanitizer.py +0 -166
- voidx-3.7.5/src/tests/test_agent/test_turn_control.py +0 -250
- voidx-3.7.5/src/tests/test_agent/test_turn_control_prompt.py +0 -57
- voidx-3.7.5/src/tests/test_agent/test_turn_metrics.py +0 -74
- voidx-3.7.5/src/tests/test_agent/test_turn_start.py +0 -159
- voidx-3.7.5/src/tests/test_config/test_config.py +0 -350
- voidx-3.7.5/src/tests/test_llm/test_compaction_retry.py +0 -500
- voidx-3.7.5/src/tests/test_llm/test_instruction_cache.py +0 -113
- voidx-3.7.5/src/tests/test_llm/test_llm_provider.py +0 -580
- voidx-3.7.5/src/tests/test_llm/test_llm_provider_advanced.py +0 -379
- voidx-3.7.5/src/tests/test_llm/test_prune_args.py +0 -451
- voidx-3.7.5/src/tests/test_llm/test_streaming_sanitize.py +0 -102
- voidx-3.7.5/src/tests/test_llm/test_token_counting.py +0 -377
- voidx-3.7.5/src/tests/test_lsp/test_lsp.py +0 -512
- voidx-3.7.5/src/tests/test_lsp/test_lsp_advanced.py +0 -331
- voidx-3.7.5/src/tests/test_mcp/test_mcp.py +0 -596
- voidx-3.7.5/src/tests/test_memory/test_main_startup.py +0 -129
- voidx-3.7.5/src/tests/test_permission/test_risk.py +0 -150
- voidx-3.7.5/src/tests/test_runtime/test_goal_resolution_refactor.py +0 -125
- voidx-3.7.5/src/tests/test_skills/test_skill_references.py +0 -355
- voidx-3.7.5/src/tests/test_skills/test_workflow_advance.py +0 -508
- voidx-3.7.5/src/tests/test_tools/bash/test_auto_route_git.py +0 -342
- voidx-3.7.5/src/tests/test_tools/bash/test_router_git.py +0 -342
- voidx-3.7.5/src/tests/test_tools/bash/test_router_safety.py +0 -94
- voidx-3.7.5/src/tests/test_tools/bash/test_router_sed_grep.py +0 -376
- voidx-3.7.5/src/tests/test_tools/bash/test_tool.py +0 -290
- voidx-3.7.5/src/tests/test_tools/file/test_edit_coverage.py +0 -197
- voidx-3.7.5/src/tests/test_tools/file/test_write_file.py +0 -500
- voidx-3.7.5/src/tests/test_tools/test_clarify_tool.py +0 -284
- voidx-3.7.5/src/tests/test_tools/test_infer_state_patch.py +0 -84
- voidx-3.7.5/src/tests/test_tools/test_interactive_tools.py +0 -483
- voidx-3.7.5/src/tests/test_tools/test_interactive_tools_write.py +0 -432
- voidx-3.7.5/src/tests/test_tools/test_loop_registry.py +0 -42
- voidx-3.7.5/src/tests/test_tools/test_make_interact_callback.py +0 -201
- voidx-3.7.5/src/tests/test_tools/test_plan_checkpoint.py +0 -445
- voidx-3.7.5/src/tests/test_tools/test_search.py +0 -452
- voidx-3.7.5/src/tests/test_tools/test_skills_tool.py +0 -244
- voidx-3.7.5/src/tests/test_tools/test_state_update_from_executed_tools.py +0 -267
- voidx-3.7.5/src/tests/test_tools/test_task_tracker.py +0 -191
- voidx-3.7.5/src/tests/test_tools/test_tool_error_handling.py +0 -241
- voidx-3.7.5/src/tests/test_tools/test_tool_registry.py +0 -123
- voidx-3.7.5/src/tests/test_tools/test_tool_schemas.py +0 -278
- voidx-3.7.5/src/tests/test_tools/test_tool_state_patch.py +0 -57
- voidx-3.7.5/src/tests/test_tools/test_user_interaction_models.py +0 -58
- voidx-3.7.5/src/tests/test_tools/test_workflow_tool.py +0 -963
- voidx-3.7.5/src/tests/test_ui/gateway/test_gateway_v2_dispatch.py +0 -415
- voidx-3.7.5/src/tests/test_ui/gateway/test_ui_events_dock_prompts.py +0 -528
- voidx-3.7.5/src/tests/test_ui/protocol/test_dto.py +0 -151
- voidx-3.7.5/src/voidx/__init__.py +0 -3
- voidx-3.7.5/src/voidx/agent/goal_resolver.py +0 -575
- voidx-3.7.5/src/voidx/agent/graph/__init__.py +0 -5
- voidx-3.7.5/src/voidx/agent/graph/compaction.py +0 -97
- voidx-3.7.5/src/voidx/agent/graph/compaction_coordinator.py +0 -675
- voidx-3.7.5/src/voidx/agent/graph/contracts.py +0 -248
- voidx-3.7.5/src/voidx/agent/graph/convergence.py +0 -87
- voidx-3.7.5/src/voidx/agent/graph/core/__init__.py +0 -9
- voidx-3.7.5/src/voidx/agent/graph/core/context.py +0 -94
- voidx-3.7.5/src/voidx/agent/graph/core/helpers.py +0 -257
- voidx-3.7.5/src/voidx/agent/graph/core/llm.py +0 -548
- voidx-3.7.5/src/voidx/agent/graph/core/turn.py +0 -353
- voidx-3.7.5/src/voidx/agent/graph/core/voidx_graph.py +0 -675
- voidx-3.7.5/src/voidx/agent/graph/permissions.py +0 -222
- voidx-3.7.5/src/voidx/agent/graph/run_loop.py +0 -438
- voidx-3.7.5/src/voidx/agent/graph/session_mixin.py +0 -38
- voidx-3.7.5/src/voidx/agent/graph/session_runtime.py +0 -296
- voidx-3.7.5/src/voidx/agent/graph/subagent.py +0 -522
- voidx-3.7.5/src/voidx/agent/graph/thread_context.py +0 -174
- voidx-3.7.5/src/voidx/agent/graph/title_mixin.py +0 -100
- voidx-3.7.5/src/voidx/agent/graph/tool_execution.py +0 -40
- voidx-3.7.5/src/voidx/agent/graph/tool_executor/__init__.py +0 -8
- voidx-3.7.5/src/voidx/agent/graph/tool_executor/executor.py +0 -516
- voidx-3.7.5/src/voidx/agent/graph/tool_executor/guards.py +0 -151
- voidx-3.7.5/src/voidx/agent/graph/tool_executor/helpers.py +0 -676
- voidx-3.7.5/src/voidx/agent/graph/tool_executor/types.py +0 -88
- voidx-3.7.5/src/voidx/agent/graph/tool_executor/workflow.py +0 -286
- voidx-3.7.5/src/voidx/agent/graph/topology.py +0 -88
- voidx-3.7.5/src/voidx/agent/graph/transcript_mixin.py +0 -18
- voidx-3.7.5/src/voidx/agent/graph/turn_control.py +0 -157
- voidx-3.7.5/src/voidx/agent/graph/turn_mixin.py +0 -37
- voidx-3.7.5/src/voidx/agent/graph/turn_runner.py +0 -541
- voidx-3.7.5/src/voidx/agent/graph/wiring.py +0 -113
- voidx-3.7.5/src/voidx/agent/loop/slash.py +0 -99
- voidx-3.7.5/src/voidx/agent/prompts.py +0 -313
- voidx-3.7.5/src/voidx/agent/runtime_context.py +0 -622
- voidx-3.7.5/src/voidx/agent/slash/code_ide.py +0 -67
- voidx-3.7.5/src/voidx/agent/slash/guide.py +0 -18
- voidx-3.7.5/src/voidx/agent/slash/handler.py +0 -518
- voidx-3.7.5/src/voidx/agent/slash/host.py +0 -365
- voidx-3.7.5/src/voidx/agent/slash/init.py +0 -96
- voidx-3.7.5/src/voidx/agent/slash/lsp.py +0 -112
- voidx-3.7.5/src/voidx/agent/slash/mcp.py +0 -427
- voidx-3.7.5/src/voidx/agent/slash/model.py +0 -445
- voidx-3.7.5/src/voidx/agent/slash/profile.py +0 -162
- voidx-3.7.5/src/voidx/agent/slash/runtime.py +0 -77
- voidx-3.7.5/src/voidx/agent/slash/session.py +0 -253
- voidx-3.7.5/src/voidx/agent/slash/skills.py +0 -117
- voidx-3.7.5/src/voidx/agent/slash/upgrade.py +0 -98
- voidx-3.7.5/src/voidx/agent/state.py +0 -28
- voidx-3.7.5/src/voidx/agent/task_state.py +0 -31
- voidx-3.7.5/src/voidx/agent/todo_state.py +0 -279
- voidx-3.7.5/src/voidx/config/__init__.py +0 -35
- voidx-3.7.5/src/voidx/config/enums.py +0 -41
- voidx-3.7.5/src/voidx/config/models.py +0 -149
- voidx-3.7.5/src/voidx/config/settings.py +0 -505
- voidx-3.7.5/src/voidx/config/settings_mcp.py +0 -69
- voidx-3.7.5/src/voidx/config/settings_permissions.py +0 -112
- voidx-3.7.5/src/voidx/data/documents/voidx-guide/README.md +0 -17
- voidx-3.7.5/src/voidx/data/documents/voidx-guide/permission.md +0 -31
- voidx-3.7.5/src/voidx/data/documents/voidx-guide/reference.md +0 -36
- voidx-3.7.5/src/voidx/llm/catalog.py +0 -512
- voidx-3.7.5/src/voidx/llm/compaction.py +0 -706
- voidx-3.7.5/src/voidx/llm/context.py +0 -45
- voidx-3.7.5/src/voidx/llm/instruction.py +0 -305
- voidx-3.7.5/src/voidx/llm/provider.py +0 -867
- voidx-3.7.5/src/voidx/llm/service.py +0 -39
- voidx-3.7.5/src/voidx/lsp/errors.py +0 -23
- voidx-3.7.5/src/voidx/lsp/manager.py +0 -391
- voidx-3.7.5/src/voidx/lsp/service.py +0 -106
- voidx-3.7.5/src/voidx/main.py +0 -167
- voidx-3.7.5/src/voidx/mcp/client/base.py +0 -375
- voidx-3.7.5/src/voidx/mcp/manager.py +0 -322
- voidx-3.7.5/src/voidx/permission/constants.py +0 -177
- voidx-3.7.5/src/voidx/permission/context.py +0 -105
- voidx-3.7.5/src/voidx/permission/engine.py +0 -238
- voidx-3.7.5/src/voidx/permission/presets.py +0 -72
- voidx-3.7.5/src/voidx/permission/rules.py +0 -443
- voidx-3.7.5/src/voidx/permission/sandbox.py +0 -276
- voidx-3.7.5/src/voidx/permission/service.py +0 -486
- voidx-3.7.5/src/voidx/permission/shell_policy.py +0 -242
- voidx-3.7.5/src/voidx/runtime/ui.py +0 -309
- voidx-3.7.5/src/voidx/skills/references.py +0 -73
- voidx-3.7.5/src/voidx/tools/agent.py +0 -331
- voidx-3.7.5/src/voidx/tools/base.py +0 -459
- voidx-3.7.5/src/voidx/tools/bash/core.py +0 -73
- voidx-3.7.5/src/voidx/tools/bash/hint/file.py +0 -232
- voidx-3.7.5/src/voidx/tools/bash/hint/search.py +0 -271
- voidx-3.7.5/src/voidx/tools/bash/router.py +0 -69
- voidx-3.7.5/src/voidx/tools/bash/safety.py +0 -59
- voidx-3.7.5/src/voidx/tools/file/replace.py +0 -695
- voidx-3.7.5/src/voidx/tools/file/safe_path.py +0 -459
- voidx-3.7.5/src/voidx/tools/file/state.py +0 -475
- voidx-3.7.5/src/voidx/tools/file/types.py +0 -35
- voidx-3.7.5/src/voidx/tools/file/write.py +0 -286
- voidx-3.7.5/src/voidx/tools/lsp.py +0 -216
- voidx-3.7.5/src/voidx/tools/registry.py +0 -155
- voidx-3.7.5/src/voidx/tools/search.py +0 -308
- voidx-3.7.5/src/voidx/tools/skills.py +0 -252
- voidx-3.7.5/src/voidx/tools/task_status.py +0 -72
- voidx-3.7.5/src/voidx/ui/command_catalog.py +0 -156
- voidx-3.7.5/src/voidx/ui/commands.py +0 -111
- voidx-3.7.5/src/voidx/ui/gateway/session/core.py +0 -478
- voidx-3.7.5/src/voidx/ui/gateway/session/method/__init__.py +0 -0
- voidx-3.7.5/src/voidx/ui/gateway/session/method/integrations.py +0 -187
- voidx-3.7.5/src/voidx/ui/gateway/session/method/settings.py +0 -256
- voidx-3.7.5/src/voidx/ui/output/dock/nodes.py +0 -419
- voidx-3.7.5/src/voidx/ui/output/events/bus.py +0 -166
- voidx-3.7.5/src/voidx/ui/output/events/consumers.py +0 -608
- voidx-3.7.5/src/voidx/ui/output/events/schema.py +0 -370
- voidx-3.7.5/src/voidx/ui/output/tool_display.py +0 -136
- voidx-3.7.5/src/voidx/ui/output/types.py +0 -94
- voidx-3.7.5/src/voidx/ui/protocol/v2/snapshot.py +0 -43
- voidx-3.7.5/src/voidx/workflow/nodes.py +0 -349
- voidx-3.7.5/src/voidx.egg-info/PKG-INFO +0 -118
- voidx-3.7.5/src/voidx.egg-info/SOURCES.txt +0 -620
- voidx-3.7.5/src/voidx.egg-info/requires.txt +0 -23
- {voidx-3.7.5 → voidx-3.8.0}/LICENSE +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/README.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/setup.cfg +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/conftest.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/conftest.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/graph/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/graph/conftest.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/graph/test_session_context_frames.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/graph/test_session_crud.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/graph/test_session_transcript.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/loop/test_manager.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/loop/test_prompt_source.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/slash/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/test_attachments.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/test_message_trimming_parsers.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/test_message_trimming_rules.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/test_permission_append.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/test_permission_phase4.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/test_permission_phase5.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/test_todo_replay_sanitization.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/test_tool_filters_gemini.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/test_tool_messages.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_agent/test_tool_result_storage.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_archive_script.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_config/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_config/test_config_advanced.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_config/test_retry_config.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_install_sh.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_llm/conftest.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_llm/test_fallback_summary.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_llm/test_gemini_provider.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_llm/test_goal_resolver_retry.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_llm/test_llm_catalog.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_llm/test_llm_catalog_fetchers.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_llm/test_llm_usage.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_llm/test_overflow_threshold.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_llm/test_request_log.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_logging/test_external.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_logging/test_internal_error.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_logging/test_tool_log.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_lsp/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_mcp/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_memory/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_memory/test_main.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_memory/test_schema_migration.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_npm_package.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_permission/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_release_npm_wheel_sync.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_runtime/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_runtime/test_processes.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_runtime/test_runtime_ui.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_selfupdate/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_selfupdate/test_selfupdate.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_skills/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_skills/conftest.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_skills/test_create_skill.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_skills/test_skill_parsing.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_test_runner.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/bash/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_coverage_fingerprint.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_edit_anchors.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_edit_bounds_input.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_edit_dedup.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_edit_drift_fallback.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_edit_drift_fallback_e2e.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_edit_errors.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_edit_line_insert.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_edit_llm_messages.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_edit_replace.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_edit_trailing_newline.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_overlap.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_read.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_read_write.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/file/test_render_numbered_diff.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_diffing.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_file_tools_redesign.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_git_tool_destructive.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_git_tool_phase5.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_git_tool_raw_permissions.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_git_tool_schema_errors.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_git_tool_structured.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_load_doc_template.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_loop_integration.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_powershell_tool.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_powershell_tool_phase6.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_replace_failure_logging.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_resolve_safe.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_retry.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_schedule_wakeup.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_shell_json_format.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_shell_tool_phase6.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_todo_tool.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_web_mcp.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_tools/test_webfetch.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/conftest.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/helpers.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_adapter.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_diff_review.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_gateway_headless_frontend.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_gateway_v2_crud_diff.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_gateway_v2_routing.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_gateway_v2_server.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_gateway_v2_session.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_guidance_fallback.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_run_manager.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_terminal.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_ui_events_dock_bus.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_ui_events_dock_status.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_ui_events_streaming.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_ui_events_subagent.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_ui_events_todo.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/gateway/test_ui_gateway.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/output/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/output/test_console_app.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/output/test_dock_formatting.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/output/test_fmt_args.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/output/test_output_browse.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/output/test_scrollback_flush.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/output/test_tool_display.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/output/test_tree_smoke.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/output/test_ui_diff.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/output/test_ui_session_changes.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/protocol/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/protocol/test_v2_envelope.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/protocol/test_v2_methods.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/protocol/test_v2_snapshot.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/protocol/test_v2_threads.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/test_display_policy.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/test_file_picker.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/tools/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/tools/test_clipboard_image.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/tools/test_clipboard_image_windows.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/tools/test_clipboard_text.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/tools/test_clipboard_text_windows.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_ui/tools/test_code_ide.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_voidx_entrypoint.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_wheel_build.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_wheel_verify_cwd.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_workflow/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_workflow/test_auto_advance.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/tests/test_workflow/test_workflow_reconcile.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/agents.py +0 -0
- {voidx-3.7.5/src/voidx/agent/graph → voidx-3.8.0/src/voidx/agent/application}/workflow_utils.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/attachments.py +0 -0
- {voidx-3.7.5/src/voidx/agent/graph → voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime}/core/loop.py +0 -0
- {voidx-3.7.5/src/voidx/agent/graph → voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime}/runtime.py +0 -0
- {voidx-3.7.5/src/voidx/agent/graph → voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime}/runtime_guards.py +0 -0
- {voidx-3.7.5/src/voidx/agent/graph → voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime}/streaming.py +0 -0
- {voidx-3.7.5/src/voidx/agent/graph → voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime}/todo_events.py +0 -0
- {voidx-3.7.5/src/voidx/agent/graph → voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime}/tool_executor/ui.py +0 -0
- {voidx-3.7.5/src/voidx/agent/graph → voidx-3.8.0/src/voidx/agent/infrastructure/langgraph/runtime}/turn_metrics.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/loop/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/loop/manager.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/loop/prompt_source.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/message_rows.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/message_trimming.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/slash/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/tool_call_ids.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/tool_exchange_sanitizer.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/tool_filters.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/tool_messages.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/agent/tool_result_storage.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/config/defaults.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/config/settings_agent.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/config/settings_api_keys.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/config/settings_code_ide.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/config/settings_custom.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/config/settings_retry.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/config/settings_skills.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/config/settings_update.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/config/settings_utils.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/config/settings_web.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/README.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/templates/api-doc.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/templates/capability-spec.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/templates/implementation-spec.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/templates/prd.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/templates/readme.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/templates/rfc.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/templates/tasks.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/templates/tech-design.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/voidx-guide/context.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/voidx-guide/debug.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/voidx-guide/extension.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/voidx-guide/mode.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/voidx-guide/model.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/voidx-guide/preferences.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/voidx-guide/quickstart.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/voidx-guide/session.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/voidx-guide/upgrade.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/voidx-guide/web.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/data/documents/voidx-guide/workflow.md +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/diffing.py +0 -0
- {voidx-3.7.5/src/voidx/agent → voidx-3.8.0/src/voidx/llm}/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/llm/message_markers.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/llm/message_status.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/llm/usage.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/logging/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/logging/external.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/logging/internal_error.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/logging/request_log.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/logging/tool_log.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/lsp/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/lsp/client.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/lsp/config.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/lsp/detector.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/lsp/detector_data.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/lsp/schema.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/mcp/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/mcp/client/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/mcp/client/errors.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/mcp/client/http_transport.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/mcp/client/sse_transport.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/mcp/client/stdio_transport.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/mcp/schema.py +0 -0
- {voidx-3.7.5/src/voidx/mcp_servers → voidx-3.8.0/src/voidx/mcp/server}/__init__.py +0 -0
- {voidx-3.7.5/src/voidx/mcp_servers → voidx-3.8.0/src/voidx/mcp/server}/web.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/mcp/tool.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/memory/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/memory/cleanup.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/memory/context_frames.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/memory/jsonl_store.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/memory/model_profiles.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/memory/runtime_state.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/memory/service.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/memory/session.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/memory/store.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/memory/subagents.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/memory/transcript.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/paths.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/permission/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/permission/evaluate.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/permission/git_policy.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/permission/grants.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/permission/process_sandbox.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/permission/risk.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/permission/schema.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/permission/wildcard.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/runtime/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/runtime/_win32_jobs.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/runtime/attachments.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/runtime/intent.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/runtime/processes.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/runtime/reference_tokens.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/runtime/task_state.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/runtime/todo.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/runtime/ui_port.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/selfupdate.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/skills/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/skills/context.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/skills/registry.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/skills/schema.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/skills/service.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/bash/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/bash/hint/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/bash/hint/git.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/bash/tool.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/checkpoint.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/clarify.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/compact.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/document.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/file/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/file/manage.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/file/overlap.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/file/read.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/file/replace_resolve.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/git/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/git/access.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/git/constants.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/git/handlers.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/git/models.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/git/parsers.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/git/process.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/git/results.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/git/routing.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/git/tool.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/powershell/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/powershell/core.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/powershell/hint/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/powershell/hint/file.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/powershell/hint/search.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/powershell/router.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/powershell/safety.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/powershell/sandbox.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/powershell/tool.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/retry.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/schedule_wakeup.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/service.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/shell/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/shell/common.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/shell/hint/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/shell/hint/git.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/task_tracker.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/todo.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/web/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/web/content.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/web/fetch.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/web/mcp.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/web/search.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/tools/workflow.py +0 -0
- {voidx-3.7.5/src/voidx/llm → voidx-3.8.0/src/voidx/ui}/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/frontend.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/adapter.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/bootstrap.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/diff_review.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/frontend.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/run_manager.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/server.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/session/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/session/consumer.py +0 -0
- {voidx-3.7.5/src/voidx/ui → voidx-3.8.0/src/voidx/ui/gateway/session/method}/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/session/method/diff.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/session/method/sessions.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/session/method/terminal.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/gateway/terminal.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/agent_display.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/ansi_marker.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/browse.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/capture.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/console/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/console/app.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/console/formatting.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/console/streaming.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/diff.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/display_policy.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/agent_placeholder.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/app.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/formatting.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/nodes_checkpoint.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/nodes_clarify.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/nodes_permission.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/nodes_startup.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/nodes_status.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/state.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/status.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/stream.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/dock/todo.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/events/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/manage_display.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/output/tree.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/protocol/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/protocol/commands.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/protocol/requests.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/protocol/schema.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/protocol/transcript.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/protocol/v2/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/protocol/v2/envelope.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/protocol/v2/methods.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/protocol/v2/threads.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/session.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/tools/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/tools/attachment_tokens.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/tools/clipboard_image.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/tools/clipboard_text.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/tools/code_ide.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/tools/file_picker.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/tools/skill_picker.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/ui/transcript.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/workflow/__init__.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/workflow/auto_advance.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/workflow/context.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/workflow/dag.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/workflow/policy.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/workflow/reconcile.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/workflow/render.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/workflow/route.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/workflow/runtime.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/workflow/schema.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/workflow/service.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx/workflow/types.py +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx.egg-info/dependency_links.txt +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx.egg-info/entry_points.txt +0 -0
- {voidx-3.7.5 → voidx-3.8.0}/src/voidx.egg-info/top_level.txt +0 -0
voidx-3.8.0/PKG-INFO
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: voidx
|
|
3
|
+
Version: 3.8.0
|
|
4
|
+
Summary: A coding agent that quantifies everything and solves with tools, not fuzzy prompts.
|
|
5
|
+
Author: chikhamx
|
|
6
|
+
License: MIT
|
|
7
|
+
Requires-Python: >=3.11
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: langgraph>=0.3.0
|
|
11
|
+
Requires-Dist: langchain>=0.3.0
|
|
12
|
+
Requires-Dist: langchain-anthropic>=0.3.0
|
|
13
|
+
Requires-Dist: langchain-openai>=0.3.0
|
|
14
|
+
Requires-Dist: pydantic>=2.10.0
|
|
15
|
+
Requires-Dist: pydantic-settings>=2.7.0
|
|
16
|
+
Requires-Dist: typer>=0.15.0
|
|
17
|
+
Requires-Dist: rich>=13.9.0
|
|
18
|
+
Requires-Dist: tiktoken>=0.8.0
|
|
19
|
+
Requires-Dist: httpx>=0.28.0
|
|
20
|
+
Requires-Dist: websockets>=14
|
|
21
|
+
Requires-Dist: pathspec>=0.12
|
|
22
|
+
Requires-Dist: jsonschema>=4.21
|
|
23
|
+
Requires-Dist: Pillow>=10.0.0; platform_system == "Windows"
|
|
24
|
+
Provides-Extra: gemini
|
|
25
|
+
Requires-Dist: langchain-google-genai>=4.0.0; extra == "gemini"
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: build>=1.2.0; extra == "dev"
|
|
28
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
29
|
+
Requires-Dist: pytest-asyncio>=0.25.0; extra == "dev"
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
# voidx
|
|
33
|
+
|
|
34
|
+
voidx is a terminal AI coding agent built in Python.
|
|
35
|
+
|
|
36
|
+
## Install
|
|
37
|
+
|
|
38
|
+
### One-line install (no Python or npm required)
|
|
39
|
+
|
|
40
|
+
macOS / Linux:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
curl -fsSL https://raw.githubusercontent.com/chikhamx/voidx/master/scripts/install.sh | bash
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Windows (PowerShell):
|
|
47
|
+
|
|
48
|
+
```powershell
|
|
49
|
+
irm https://raw.githubusercontent.com/chikhamx/voidx/master/scripts/install.ps1 | iex
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The installer downloads a standalone Python runtime and sets up voidx in an
|
|
53
|
+
isolated environment — nothing else is needed on your machine.
|
|
54
|
+
|
|
55
|
+
### pip
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
python -m pip install voidx voidx-cli
|
|
59
|
+
voidx
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### npm
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
npm install -g @chikhamx/voidx
|
|
66
|
+
voidx
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Upgrade
|
|
70
|
+
|
|
71
|
+
Upgrade both Python packages together so the core and terminal UI stay on the
|
|
72
|
+
same version:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
python -m pip install --upgrade voidx voidx-cli
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
For npm installations, upgrade the npm package instead:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
npm update -g @chikhamx/voidx
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The one-line installers can be rerun to repair or upgrade their managed
|
|
85
|
+
environment.
|
|
86
|
+
|
|
87
|
+
### From source
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
git clone https://github.com/chikhamx/voidx.git
|
|
91
|
+
cd voidx
|
|
92
|
+
pip install -e .
|
|
93
|
+
voidx
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### China / slow network
|
|
97
|
+
|
|
98
|
+
Set mirror environment variables before running any install method:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
export VOIDX_PYTHON_MIRROR=https://npmmirror.com/mirrors/python-standalone
|
|
102
|
+
export VOIDX_PIP_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Useful Commands
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
voidx version
|
|
109
|
+
voidx sessions
|
|
110
|
+
voidx -w /path/to/project
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Development
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
.venv/bin/python -m pytest
|
|
117
|
+
.venv/bin/python scripts/package.py --format all --clean
|
|
118
|
+
npm --prefix npm run check
|
|
119
|
+
```
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "voidx"
|
|
3
|
+
dynamic = ["version"]
|
|
4
|
+
description = "A coding agent that quantifies everything and solves with tools, not fuzzy prompts."
|
|
5
|
+
license = {text = "MIT"}
|
|
6
|
+
authors = [{name = "chikhamx"}]
|
|
7
|
+
readme = "README.md"
|
|
8
|
+
requires-python = ">=3.11"
|
|
9
|
+
dependencies = [
|
|
10
|
+
"langgraph>=0.3.0",
|
|
11
|
+
"langchain>=0.3.0",
|
|
12
|
+
"langchain-anthropic>=0.3.0",
|
|
13
|
+
"langchain-openai>=0.3.0",
|
|
14
|
+
"pydantic>=2.10.0",
|
|
15
|
+
"pydantic-settings>=2.7.0",
|
|
16
|
+
"typer>=0.15.0",
|
|
17
|
+
"rich>=13.9.0",
|
|
18
|
+
"tiktoken>=0.8.0",
|
|
19
|
+
"httpx>=0.28.0",
|
|
20
|
+
"websockets>=14",
|
|
21
|
+
"pathspec>=0.12",
|
|
22
|
+
"jsonschema>=4.21",
|
|
23
|
+
"Pillow>=10.0.0; platform_system == 'Windows'",
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
[project.scripts]
|
|
27
|
+
voidx = "voidx.main:cli"
|
|
28
|
+
|
|
29
|
+
[project.optional-dependencies]
|
|
30
|
+
gemini = ["langchain-google-genai>=4.0.0"]
|
|
31
|
+
dev = [
|
|
32
|
+
"build>=1.2.0",
|
|
33
|
+
"pytest>=8.0.0",
|
|
34
|
+
"pytest-asyncio>=0.25.0",
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
[dependency-groups]
|
|
38
|
+
dev = [
|
|
39
|
+
"build>=1.2.0",
|
|
40
|
+
"pytest>=8.0.0",
|
|
41
|
+
"pytest-asyncio>=0.25.0",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
[build-system]
|
|
45
|
+
requires = ["setuptools>=68", "wheel"]
|
|
46
|
+
build-backend = "setuptools.build_meta"
|
|
47
|
+
|
|
48
|
+
[tool.setuptools.dynamic]
|
|
49
|
+
version = {attr = "voidx.__version__"}
|
|
50
|
+
|
|
51
|
+
[tool.setuptools.packages.find]
|
|
52
|
+
where = ["src"]
|
|
53
|
+
|
|
54
|
+
[tool.setuptools.package-data]
|
|
55
|
+
"voidx.skills" = [
|
|
56
|
+
"bundled/*/SKILL.md",
|
|
57
|
+
]
|
|
58
|
+
"voidx.data" = [
|
|
59
|
+
"documents/**/*.md",
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
[tool.pytest.ini_options]
|
|
63
|
+
asyncio_mode = "auto"
|
|
64
|
+
pythonpath = ["src", "tui"]
|
|
65
|
+
testpaths = ["src/tests", "tui/tests"]
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
from voidx.agent.application.compaction_service import CompactionService
|
|
10
|
+
from voidx.agent.application.session_service import SessionService
|
|
11
|
+
from voidx.agent.application.tool_service import ToolService
|
|
12
|
+
from voidx.agent.application.turn_service import TurnService
|
|
13
|
+
from voidx.agent.domain.compaction import CompactionResult
|
|
14
|
+
from voidx.agent.domain.events import AgentEventKind
|
|
15
|
+
from voidx.agent.domain.state import AgentRuntime
|
|
16
|
+
from voidx.agent.ports.tools import ToolExecutionResult
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass
|
|
20
|
+
class MemorySessionStore:
|
|
21
|
+
runtimes: dict[str, AgentRuntime] = field(default_factory=dict)
|
|
22
|
+
cleared: list[str] = field(default_factory=list)
|
|
23
|
+
|
|
24
|
+
async def load_runtime(self, session_id: str) -> AgentRuntime:
|
|
25
|
+
return self.runtimes.get(session_id, AgentRuntime()).model_copy(deep=True)
|
|
26
|
+
|
|
27
|
+
async def save_runtime(self, session_id: str, runtime: AgentRuntime) -> None:
|
|
28
|
+
self.runtimes[session_id] = runtime.model_copy(deep=True)
|
|
29
|
+
|
|
30
|
+
async def clear_runtime(self, session_id: str) -> None:
|
|
31
|
+
self.cleared.append(session_id)
|
|
32
|
+
self.runtimes.pop(session_id, None)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@pytest.mark.asyncio
|
|
36
|
+
async def test_session_service_restores_persists_and_clears_runtime():
|
|
37
|
+
stored = AgentRuntime(compaction_summary="saved", session_time="2026-07-19 CST")
|
|
38
|
+
store = MemorySessionStore(runtimes={"s1": stored})
|
|
39
|
+
service = SessionService(store)
|
|
40
|
+
|
|
41
|
+
restored = await service.restore_runtime("s1")
|
|
42
|
+
restored.compaction_summary = "updated"
|
|
43
|
+
await service.persist_runtime("s1", restored)
|
|
44
|
+
await service.clear_runtime("s1")
|
|
45
|
+
|
|
46
|
+
assert restored.session_time == "2026-07-19 CST"
|
|
47
|
+
assert store.cleared == ["s1"]
|
|
48
|
+
assert "s1" not in store.runtimes
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@dataclass
|
|
52
|
+
class FakeCompactionEngine:
|
|
53
|
+
result: CompactionResult | None
|
|
54
|
+
calls: list[tuple[list, list | None, bool, bool, bool]] = field(default_factory=list)
|
|
55
|
+
|
|
56
|
+
async def compact(self, messages, session_messages=None, *, force=False, ask=True, preflight=False):
|
|
57
|
+
self.calls.append((messages, session_messages, force, ask, preflight))
|
|
58
|
+
return self.result
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@pytest.mark.asyncio
|
|
62
|
+
async def test_compaction_service_applies_result_and_emits_semantic_event():
|
|
63
|
+
result = CompactionResult(
|
|
64
|
+
summary="summary",
|
|
65
|
+
removed_messages=["old"],
|
|
66
|
+
live_messages=["new"],
|
|
67
|
+
tail_id="tail-1",
|
|
68
|
+
)
|
|
69
|
+
engine = FakeCompactionEngine(result)
|
|
70
|
+
events = []
|
|
71
|
+
service = CompactionService(engine, events.append)
|
|
72
|
+
messages = ["old", "new"]
|
|
73
|
+
|
|
74
|
+
removed, tail_id = await service.compact_live_messages(messages, force=True, ask=False)
|
|
75
|
+
|
|
76
|
+
assert messages == ["new"]
|
|
77
|
+
assert removed == ["old"]
|
|
78
|
+
assert tail_id == "tail-1"
|
|
79
|
+
assert events[0].kind is AgentEventKind.COMPACTION_COMPLETED
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
@dataclass
|
|
83
|
+
class FakePermission:
|
|
84
|
+
allowed: bool
|
|
85
|
+
calls: list[tuple[str, dict]] = field(default_factory=list)
|
|
86
|
+
|
|
87
|
+
async def authorize(self, tool_name: str, arguments: dict) -> bool:
|
|
88
|
+
self.calls.append((tool_name, arguments))
|
|
89
|
+
return self.allowed
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@dataclass
|
|
93
|
+
class FakeTools:
|
|
94
|
+
result: ToolExecutionResult
|
|
95
|
+
calls: list[tuple[str, dict]] = field(default_factory=list)
|
|
96
|
+
|
|
97
|
+
async def execute(self, tool_name: str, arguments: dict) -> ToolExecutionResult:
|
|
98
|
+
self.calls.append((tool_name, arguments))
|
|
99
|
+
return self.result
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
@pytest.mark.asyncio
|
|
103
|
+
async def test_tool_service_checks_permission_before_execution():
|
|
104
|
+
permission = FakePermission(allowed=False)
|
|
105
|
+
tools = FakeTools(ToolExecutionResult(output="should not run"))
|
|
106
|
+
|
|
107
|
+
result = await ToolService(permission, tools).execute("write", {"path": "x"})
|
|
108
|
+
|
|
109
|
+
assert result.denied is True
|
|
110
|
+
assert tools.calls == []
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
@dataclass
|
|
114
|
+
class FakeTurnEngine:
|
|
115
|
+
fail: bool = False
|
|
116
|
+
calls: list[tuple[str, AgentRuntime, str | None]] = field(default_factory=list)
|
|
117
|
+
|
|
118
|
+
async def run(
|
|
119
|
+
self,
|
|
120
|
+
user_text: str,
|
|
121
|
+
runtime: AgentRuntime,
|
|
122
|
+
*,
|
|
123
|
+
display_text: str | None = None,
|
|
124
|
+
context=None,
|
|
125
|
+
) -> AgentRuntime:
|
|
126
|
+
self.calls.append((user_text, runtime, display_text))
|
|
127
|
+
if self.fail:
|
|
128
|
+
raise RuntimeError("engine failed")
|
|
129
|
+
return runtime.model_copy(update={"compaction_summary": "completed"})
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
@dataclass
|
|
133
|
+
class MemoryEvents:
|
|
134
|
+
events: list = field(default_factory=list)
|
|
135
|
+
|
|
136
|
+
def publish(self, event) -> None:
|
|
137
|
+
self.events.append(event)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
@pytest.mark.asyncio
|
|
141
|
+
async def test_turn_service_orders_events_and_persists_success():
|
|
142
|
+
sessions = MemorySessionStore()
|
|
143
|
+
events = MemoryEvents()
|
|
144
|
+
service = TurnService(FakeTurnEngine(), sessions, events)
|
|
145
|
+
|
|
146
|
+
runtime = await service.run("s1", "hello", AgentRuntime(), display_text="focus")
|
|
147
|
+
|
|
148
|
+
assert runtime.compaction_summary == "completed"
|
|
149
|
+
assert [event.kind for event in events.events] == [
|
|
150
|
+
AgentEventKind.TURN_STARTED,
|
|
151
|
+
AgentEventKind.TURN_COMPLETED,
|
|
152
|
+
]
|
|
153
|
+
assert sessions.runtimes["s1"].compaction_summary == "completed"
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
@pytest.mark.asyncio
|
|
157
|
+
async def test_turn_service_persists_failure_and_emits_failed_event():
|
|
158
|
+
sessions = MemorySessionStore()
|
|
159
|
+
events = MemoryEvents()
|
|
160
|
+
service = TurnService(FakeTurnEngine(fail=True), sessions, events)
|
|
161
|
+
|
|
162
|
+
with pytest.raises(RuntimeError, match="engine failed"):
|
|
163
|
+
await service.run("s1", "hello", AgentRuntime())
|
|
164
|
+
|
|
165
|
+
assert "s1" in sessions.runtimes
|
|
166
|
+
assert [event.kind for event in events.events] == [
|
|
167
|
+
AgentEventKind.TURN_STARTED,
|
|
168
|
+
AgentEventKind.TURN_FAILED,
|
|
169
|
+
]
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
@pytest.mark.asyncio
|
|
173
|
+
async def test_turn_service_cancel_persists_and_propagates_cancellation():
|
|
174
|
+
class CancelledEngine:
|
|
175
|
+
async def run(self, user_text, runtime, *, display_text=None, context=None):
|
|
176
|
+
raise asyncio.CancelledError
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
sessions = MemorySessionStore()
|
|
180
|
+
events = MemoryEvents()
|
|
181
|
+
service = TurnService(CancelledEngine(), sessions, events)
|
|
182
|
+
|
|
183
|
+
with pytest.raises(asyncio.CancelledError):
|
|
184
|
+
await service.run("s1", "hello", AgentRuntime())
|
|
185
|
+
|
|
186
|
+
assert "s1" in sessions.runtimes
|
|
187
|
+
assert events.events[-1].metadata["cancelled"] is True
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
from langchain_core.messages import HumanMessage
|
|
2
|
+
|
|
3
|
+
from voidx.agent.domain.compaction import CompactionResult, PreflightCompactionResult
|
|
4
|
+
from voidx.agent.infrastructure.langgraph.runtime.compaction_coordinator import (
|
|
5
|
+
CompactionResult as CoordinatorCompactionResult,
|
|
6
|
+
)
|
|
7
|
+
from voidx.agent.infrastructure.langgraph.runtime.compaction_coordinator import (
|
|
8
|
+
PreflightCompactionResult as CoordinatorPreflightCompactionResult,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def test_compaction_dtos_have_one_domain_source() -> None:
|
|
13
|
+
assert CoordinatorCompactionResult is CompactionResult
|
|
14
|
+
assert CoordinatorPreflightCompactionResult is PreflightCompactionResult
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_preflight_result_converts_domain_compaction_metadata() -> None:
|
|
18
|
+
removed = [HumanMessage(content="old")]
|
|
19
|
+
result = CompactionResult(
|
|
20
|
+
summary="summary",
|
|
21
|
+
removed_messages=removed,
|
|
22
|
+
live_messages=[HumanMessage(content="new")],
|
|
23
|
+
tail_id="tail-1",
|
|
24
|
+
metadata={
|
|
25
|
+
"removed_message_count": 3,
|
|
26
|
+
"retained_turn_count": 2,
|
|
27
|
+
"pre_tokens": 100,
|
|
28
|
+
"post_tokens": 40,
|
|
29
|
+
"post_compaction_target": 50,
|
|
30
|
+
"compaction_reason": "threshold",
|
|
31
|
+
},
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
preflight = PreflightCompactionResult.from_compaction_result(result)
|
|
35
|
+
|
|
36
|
+
assert preflight.model_dump() == {
|
|
37
|
+
"compacted": True,
|
|
38
|
+
"summary": "summary",
|
|
39
|
+
"removed_message_count": 3,
|
|
40
|
+
"retained_turn_count": 2,
|
|
41
|
+
"pre_tokens": 100,
|
|
42
|
+
"post_tokens": 40,
|
|
43
|
+
"post_target_tokens": 50,
|
|
44
|
+
"tail_anchor_id": "tail-1",
|
|
45
|
+
"fallback": False,
|
|
46
|
+
"reason": "threshold",
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def test_empty_preflight_result_is_not_compacted() -> None:
|
|
51
|
+
assert PreflightCompactionResult.from_compaction_result(None) == PreflightCompactionResult(
|
|
52
|
+
compacted=False
|
|
53
|
+
)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from voidx.agent.domain.events import AgentEvent, AgentEventKind
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_agent_event_is_presentation_agnostic() -> None:
|
|
5
|
+
event = AgentEvent(
|
|
6
|
+
kind=AgentEventKind.TURN_STARTED,
|
|
7
|
+
message="turn started",
|
|
8
|
+
metadata={"thread_id": "thread-1"},
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
assert event.kind is AgentEventKind.TURN_STARTED
|
|
12
|
+
assert event.metadata == {"thread_id": "thread-1"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import ast
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
AGENT_ROOT = Path(__file__).resolve().parents[3] / "voidx" / "agent"
|
|
7
|
+
DOMAIN_ROOT = AGENT_ROOT / "domain"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _imports(path: Path) -> set[str]:
|
|
11
|
+
tree = ast.parse(path.read_text(encoding="utf-8"))
|
|
12
|
+
modules: set[str] = set()
|
|
13
|
+
for node in ast.walk(tree):
|
|
14
|
+
if isinstance(node, ast.Import):
|
|
15
|
+
modules.update(alias.name for alias in node.names)
|
|
16
|
+
elif isinstance(node, ast.ImportFrom) and node.module:
|
|
17
|
+
modules.add(node.module)
|
|
18
|
+
return modules
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_agent_internal_modules_import_runtime_task_state_directly() -> None:
|
|
22
|
+
offenders = [
|
|
23
|
+
path.relative_to(AGENT_ROOT).as_posix()
|
|
24
|
+
for path in AGENT_ROOT.rglob("*.py")
|
|
25
|
+
if "voidx.agent.task_state" in _imports(path)
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
assert offenders == []
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def test_domain_has_no_infrastructure_dependencies() -> None:
|
|
34
|
+
forbidden_prefixes = (
|
|
35
|
+
"voidx.agent.infrastructure.langgraph.runtime",
|
|
36
|
+
"voidx.config",
|
|
37
|
+
"voidx.memory",
|
|
38
|
+
"voidx.permission",
|
|
39
|
+
"voidx.tools",
|
|
40
|
+
"voidx.ui",
|
|
41
|
+
"voidx.workflow",
|
|
42
|
+
"langgraph",
|
|
43
|
+
)
|
|
44
|
+
offenders = {
|
|
45
|
+
path.name: sorted(
|
|
46
|
+
module
|
|
47
|
+
for module in _imports(path)
|
|
48
|
+
if module.startswith(forbidden_prefixes)
|
|
49
|
+
)
|
|
50
|
+
for path in DOMAIN_ROOT.glob("*.py")
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
assert {path: imports for path, imports in offenders.items() if imports} == {}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from voidx.agent.domain.state import AgentRuntime
|
|
2
|
+
from voidx.agent.infrastructure.runtime_state_mapper import (
|
|
3
|
+
agent_runtime_from_snapshot,
|
|
4
|
+
snapshot_from_agent_runtime,
|
|
5
|
+
)
|
|
6
|
+
from voidx.memory.service import RuntimeStateSnapshot
|
|
7
|
+
from voidx.runtime import (
|
|
8
|
+
GoalSpec,
|
|
9
|
+
InteractionMode,
|
|
10
|
+
TaskIntent,
|
|
11
|
+
TaskState,
|
|
12
|
+
TodoRunState,
|
|
13
|
+
WorkflowRoute,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_agent_runtime_snapshot_round_trip_preserves_persisted_json() -> None:
|
|
18
|
+
snapshot = RuntimeStateSnapshot(
|
|
19
|
+
interaction_mode=InteractionMode.GOAL,
|
|
20
|
+
task_state=TaskState(
|
|
21
|
+
current_intent=TaskIntent.CODING,
|
|
22
|
+
previous_intent=TaskIntent.GENERAL,
|
|
23
|
+
current_goal=GoalSpec(desc="unify agent state"),
|
|
24
|
+
workflow_route=WorkflowRoute(join="tdd", leave="verify"),
|
|
25
|
+
todo_state=TodoRunState.model_validate(
|
|
26
|
+
{
|
|
27
|
+
"summary": "0/1 done · 1 active",
|
|
28
|
+
"total": 1,
|
|
29
|
+
"active": 1,
|
|
30
|
+
"active_items": [
|
|
31
|
+
{"id": "domain", "content": "create domain", "status": "active"}
|
|
32
|
+
],
|
|
33
|
+
"items": [
|
|
34
|
+
{"id": "domain", "content": "create domain", "status": "active"}
|
|
35
|
+
],
|
|
36
|
+
"updated_at": "2026-07-19T00:00:00+08:00",
|
|
37
|
+
}
|
|
38
|
+
),
|
|
39
|
+
),
|
|
40
|
+
compaction_summary="summary",
|
|
41
|
+
session_time="2026-07-19 CST",
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
runtime = agent_runtime_from_snapshot(snapshot)
|
|
45
|
+
restored = snapshot_from_agent_runtime(runtime)
|
|
46
|
+
|
|
47
|
+
assert isinstance(runtime, AgentRuntime)
|
|
48
|
+
assert restored.model_dump(mode="json") == snapshot.model_dump(mode="json")
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from voidx.agent.domain.state import AgentRuntime
|
|
2
|
+
from voidx.agent.domain.turn import TurnPhase, advance_turn
|
|
3
|
+
from voidx.runtime import GoalSpec, InteractionMode, TaskIntent, TaskState
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def test_agent_runtime_owns_domain_state_without_graph() -> None:
|
|
7
|
+
runtime = AgentRuntime(
|
|
8
|
+
interaction_mode=InteractionMode.GOAL,
|
|
9
|
+
task_state=TaskState(
|
|
10
|
+
current_intent=TaskIntent.CODING,
|
|
11
|
+
current_goal=GoalSpec(desc="unify agent state"),
|
|
12
|
+
),
|
|
13
|
+
compaction_summary="existing summary",
|
|
14
|
+
session_time="2026-07-19 CST",
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
assert runtime.task_state.current_goal == GoalSpec(desc="unify agent state")
|
|
18
|
+
assert runtime.compaction_summary == "existing summary"
|
|
19
|
+
assert runtime.session_time == "2026-07-19 CST"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def test_turn_state_conversion_is_pure_and_preserves_runtime() -> None:
|
|
23
|
+
runtime = AgentRuntime(compaction_summary="summary")
|
|
24
|
+
|
|
25
|
+
running = advance_turn(runtime, TurnPhase.RUNNING)
|
|
26
|
+
committed = advance_turn(running, TurnPhase.COMMITTED)
|
|
27
|
+
|
|
28
|
+
assert runtime.turn_phase is TurnPhase.INITIAL
|
|
29
|
+
assert running.turn_phase is TurnPhase.RUNNING
|
|
30
|
+
assert committed.turn_phase is TurnPhase.COMMITTED
|
|
31
|
+
assert committed.compaction_summary == "summary"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def test_turn_state_rejects_invalid_transition() -> None:
|
|
35
|
+
runtime = AgentRuntime(turn_phase=TurnPhase.COMMITTED)
|
|
36
|
+
|
|
37
|
+
try:
|
|
38
|
+
advance_turn(runtime, TurnPhase.RUNNING)
|
|
39
|
+
except ValueError as exc:
|
|
40
|
+
assert "committed -> running" in str(exc)
|
|
41
|
+
else:
|
|
42
|
+
raise AssertionError("invalid turn transition was accepted")
|