voidx 3.4.1__tar.gz → 3.4.2__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.4.1/src/voidx.egg-info → voidx-3.4.2}/PKG-INFO +1 -1
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/__init__.py +1 -1
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/attachments.py +14 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/app.py +16 -40
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/tree.py +40 -5
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/panels.py +7 -1
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/parser.py +12 -9
- {voidx-3.4.1 → voidx-3.4.2/src/voidx.egg-info}/PKG-INFO +1 -1
- {voidx-3.4.1 → voidx-3.4.2}/LICENSE +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/README.md +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/pyproject.toml +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/setup.cfg +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/agents.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/goal_resolver.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/compaction.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/compaction_coordinator.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/contracts.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/convergence.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/core/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/core/_voidx_graph.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/core/helpers.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/core/llm.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/permissions.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/run_loop.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/runtime.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/runtime_guards.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/session_mixin.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/session_runtime.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/streaming.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/subagent.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/title_mixin.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/todo_events.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/tool_execution.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/tool_executor/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/tool_executor/executor.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/tool_executor/guards.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/tool_executor/helpers.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/tool_executor/types.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/tool_executor/ui.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/tool_executor/workflow.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/topology.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/transcript_mixin.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/turn_mixin.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/turn_runner.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/wiring.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/graph/workflow_utils.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/message_rows.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/message_trimming.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/prompts.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/runtime_context.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/code_ide.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/guide.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/handler.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/host.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/init.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/lsp.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/mcp.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/model.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/profile.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/runtime.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/session.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/skills.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/slash/upgrade.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/state.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/task_state.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/todo_state.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/tool_call_ids.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/tool_exchange_sanitizer.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/tool_filters.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/tool_messages.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/agent/tool_result_storage.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/enums.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/models.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/permissions.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/settings.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/settings_agent.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/settings_api_keys.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/settings_code_ide.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/settings_custom.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/settings_mcp.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/settings_permissions.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/settings_skills.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/settings_update.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/settings_utils.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/config/settings_web.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/data/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/data/templates/api-doc.md +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/data/templates/prd.md +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/data/templates/readme.md +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/data/templates/rfc.md +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/data/templates/tech-design.md +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/diffing.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/llm/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/llm/catalog.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/llm/compaction.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/llm/context.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/llm/instruction.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/llm/message_markers.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/llm/message_status.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/llm/provider.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/llm/service.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/llm/usage.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/logging/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/logging/request_log.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/logging/tool_log.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/lsp/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/lsp/client.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/lsp/config.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/lsp/detector.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/lsp/detector_data.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/lsp/errors.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/lsp/manager.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/lsp/schema.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/lsp/service.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/main.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/mcp/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/mcp/client/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/mcp/client/base.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/mcp/client/errors.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/mcp/client/http_transport.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/mcp/client/sse_transport.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/mcp/client/stdio_transport.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/mcp/manager.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/mcp/schema.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/mcp/tool.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/mcp_servers/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/mcp_servers/web.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/memory/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/memory/cleanup.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/memory/context_frames.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/memory/jsonl_store.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/memory/model_profiles.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/memory/runtime_state.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/memory/service.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/memory/session.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/memory/store.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/memory/subagents.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/memory/transcript.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/permission/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/permission/context.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/permission/engine.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/permission/evaluate.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/permission/rules.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/permission/sandbox.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/permission/schema.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/permission/service.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/permission/wildcard.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/runtime/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/runtime/attachments.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/runtime/intent.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/runtime/reference_tokens.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/runtime/task_state.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/runtime/todo.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/runtime/ui.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/runtime/ui_port.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/selfupdate.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/skills/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/skills/context.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/skills/references.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/skills/registry.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/skills/schema.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/skills/service.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/agent.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/base.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/bash/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/bash/core.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/bash/hint/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/bash/hint/file.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/bash/hint/git.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/bash/hint/search.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/bash/router.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/bash/safety.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/bash/tool.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/clarify.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/compact_context.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/file_ops/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/file_ops/edit_execute.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/file_ops/edit_resolve.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/file_ops/file.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/file_ops/read.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/file_ops/types.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/file_ops/write.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/file_state.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/git.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/load_doc_template.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/load_skills.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/lsp.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/plan_checkpoint.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/powershell/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/powershell/core.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/powershell/hint/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/powershell/hint/file.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/powershell/hint/search.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/powershell/router.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/powershell/safety.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/powershell/sandbox.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/powershell/tool.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/registry.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/search.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/service.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/shell/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/shell/common.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/shell/hint/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/shell/hint/git.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/skills.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/task_status.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/task_tracker.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/todo.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/web_content.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/web_mcp.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/webfetch.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/websearch.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/tools/workflow.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/commands.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/frontend.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/gateway/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/gateway/adapter.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/gateway/bootstrap.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/gateway/diff_review.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/gateway/server.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/gateway/session.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/gateway/terminal.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/agent_display.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/browse.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/capture.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/console/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/console/app.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/console/formatting.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/console/streaming.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/diff.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/display_policy.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/agent_placeholder.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/formatting.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/nodes.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/nodes_checkpoint.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/nodes_clarify.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/nodes_permission.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/nodes_startup.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/nodes_status.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/state.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/status.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/stream.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/dock/todo.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/events/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/events/bus.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/events/consumers.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/events/schema.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/output/types.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/protocol/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/protocol/commands.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/protocol/envelope.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/protocol/requests.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/protocol/schema.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/protocol/transcript.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/protocol/v2/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/protocol/v2/envelope.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/protocol/v2/methods.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/protocol/v2/snapshot.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/protocol/v2/threads.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/session.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tools/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tools/attachment_tokens.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tools/clipboard_image.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tools/clipboard_text.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tools/code_ide.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tools/file_picker.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tools/skill_picker.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/transcript.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/activity.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/app.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/choice_mixin.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/clipboard_mixin.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/helpers.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/input.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/overlays.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/render_activity.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/render_frame.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/render_input.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/render_status.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/render_todo.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/renderer.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/state.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/terminal_mixin.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/ui/tui/text_prompt_mixin.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/__init__.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/auto_advance.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/context.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/dag.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/nodes.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/policy.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/reconcile.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/render.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/route.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/runtime.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/schema.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/service.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx/workflow/types.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx.egg-info/SOURCES.txt +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx.egg-info/dependency_links.txt +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx.egg-info/entry_points.txt +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx.egg-info/requires.txt +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/src/voidx.egg-info/top_level.txt +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/tests/test_install_sh.py +0 -0
- {voidx-3.4.1 → voidx-3.4.2}/tests/test_npm_package.py +0 -0
|
@@ -152,9 +152,23 @@ def is_image_path(path: Path | str) -> bool:
|
|
|
152
152
|
return Path(path).suffix.lower() in IMAGE_EXTENSIONS
|
|
153
153
|
|
|
154
154
|
|
|
155
|
+
_PASTED_RE = re.compile(r"<pasted>\n.*?\n</pasted>", re.DOTALL)
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def _pasted_spans(text: str) -> list[tuple[int, int]]:
|
|
159
|
+
"""Return (start, end) spans of all <pasted>...</pasted> blocks."""
|
|
160
|
+
return [(m.start(), m.end()) for m in _PASTED_RE.finditer(text)]
|
|
161
|
+
|
|
162
|
+
|
|
155
163
|
def _attachment_tokens(text: str) -> list[tuple[int, int, str]]:
|
|
156
164
|
tokens: list[tuple[int, int, str]] = []
|
|
165
|
+
excluded = _pasted_spans(text)
|
|
157
166
|
for match in _ATTACHMENT_RE.finditer(text):
|
|
167
|
+
# Skip @-references and [image-] tokens inside <pasted> blocks —
|
|
168
|
+
# pasted content is quoted material (e.g. code with decorators),
|
|
169
|
+
# not user-authored attachment references.
|
|
170
|
+
if any(start <= match.start() < end for start, end in excluded):
|
|
171
|
+
continue
|
|
158
172
|
image_stem = match.group(3)
|
|
159
173
|
if image_stem:
|
|
160
174
|
raw_path = f":image:{image_stem}"
|
|
@@ -7,17 +7,15 @@ from typing import Any, Callable, Sequence
|
|
|
7
7
|
|
|
8
8
|
from rich.console import Console, Group
|
|
9
9
|
from rich.live import Live
|
|
10
|
-
from rich.markup import escape
|
|
11
10
|
from rich.text import Text
|
|
12
11
|
|
|
12
|
+
from rich.markup import escape
|
|
13
|
+
|
|
13
14
|
from voidx.ui.output.dock.formatting import (
|
|
14
15
|
ANSI_LINE_PREFIX,
|
|
15
|
-
_ansi_line,
|
|
16
16
|
_clean,
|
|
17
|
-
|
|
18
|
-
_strip_ansi_trailing_space,
|
|
17
|
+
_PASTED_RE,
|
|
19
18
|
_text_from_line,
|
|
20
|
-
split_pasted_segments,
|
|
21
19
|
)
|
|
22
20
|
from voidx.ui.output.dock.nodes import DockNodeMixin
|
|
23
21
|
from voidx.ui.output.dock.stream import DockStreamMixin
|
|
@@ -222,12 +220,13 @@ class BottomInputDock(DockStreamMixin, DockStatusMixin, DockNodeMixin):
|
|
|
222
220
|
if self._tree.root.children:
|
|
223
221
|
self._append_root_spacer()
|
|
224
222
|
preview = _clean(text)
|
|
225
|
-
|
|
226
|
-
header, body_lines = self.
|
|
223
|
+
preview = _PASTED_RE.sub(r"\1", preview)
|
|
224
|
+
header, body_lines = self._render_turn_text(preview)
|
|
225
|
+
header = f"[bold white]❯[/] {header}" if header else "[bold white]❯[/]"
|
|
227
226
|
self._current_turn = self._tree.new_node(
|
|
228
227
|
parent=self._tree.root,
|
|
229
228
|
node_type="turn",
|
|
230
|
-
header=
|
|
229
|
+
header=header,
|
|
231
230
|
body_lines=body_lines,
|
|
232
231
|
collapsed=False,
|
|
233
232
|
)
|
|
@@ -235,40 +234,17 @@ class BottomInputDock(DockStreamMixin, DockStatusMixin, DockNodeMixin):
|
|
|
235
234
|
self.refresh()
|
|
236
235
|
return self._current_turn
|
|
237
236
|
|
|
238
|
-
def
|
|
239
|
-
|
|
240
|
-
) -> tuple[str, list[str]]:
|
|
241
|
-
"""Render (is_pasted, content) segments into (header, body_lines).
|
|
237
|
+
def _render_turn_text(self, text: str) -> tuple[str, list[str]]:
|
|
238
|
+
"""Render user turn text into (header, body_lines) as plain text.
|
|
242
239
|
|
|
243
|
-
|
|
244
|
-
|
|
240
|
+
<pasted> wrapper tags are stripped (content kept), then the entire
|
|
241
|
+
text is rendered as escaped plain text — no markdown formatting.
|
|
245
242
|
"""
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
md_lines = [
|
|
252
|
-
_ansi_line(line)
|
|
253
|
-
for line in _markdown_lines(content, width)
|
|
254
|
-
]
|
|
255
|
-
if index == 0 and md_lines:
|
|
256
|
-
header = md_lines[0]
|
|
257
|
-
body_lines.extend(md_lines[1:])
|
|
258
|
-
else:
|
|
259
|
-
body_lines.extend(md_lines)
|
|
260
|
-
else:
|
|
261
|
-
lines = [
|
|
262
|
-
_strip_ansi_trailing_space(line)
|
|
263
|
-
for line in ((content.splitlines() or [content]) if content else [])
|
|
264
|
-
]
|
|
265
|
-
if index == 0 and lines:
|
|
266
|
-
header = escape(lines[0])
|
|
267
|
-
body_lines.extend(escape(line) for line in lines[1:])
|
|
268
|
-
else:
|
|
269
|
-
body_lines.extend(escape(line) for line in lines)
|
|
270
|
-
if not header and body_lines:
|
|
271
|
-
header = body_lines.pop(0)
|
|
243
|
+
lines = text.splitlines() or [text] if text else []
|
|
244
|
+
if not lines:
|
|
245
|
+
return "", []
|
|
246
|
+
header = escape(lines[0])
|
|
247
|
+
body_lines = [escape(line) for line in lines[1:]]
|
|
272
248
|
return header, body_lines
|
|
273
249
|
|
|
274
250
|
def ensure_agent(self) -> OutputNode:
|
|
@@ -14,6 +14,27 @@ from rich.text import Text
|
|
|
14
14
|
USER_ROW_STYLE = "white on #3a3937"
|
|
15
15
|
TOOL_META_BRANCH = "[dim]└[/dim] "
|
|
16
16
|
|
|
17
|
+
# Must match voidx.ui.output.dock.formatting.ANSI_LINE_PREFIX.
|
|
18
|
+
# Duplicated here to avoid circular imports (formatting imports from dock,
|
|
19
|
+
# dock imports from tree).
|
|
20
|
+
_ANSI_LINE_PREFIX = "\x00voidx-ansi\x00"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _visible_len(line: str) -> int:
|
|
24
|
+
"""Compute visible cell length of a render line safely.
|
|
25
|
+
|
|
26
|
+
Lines may contain an ANSI_LINE_PREFIX marker separating rich-markup text
|
|
27
|
+
from ANSI-styled text (pasted segments). The ANSI portion can contain
|
|
28
|
+
arbitrary characters including ``[/]`` that would crash Text.from_markup,
|
|
29
|
+
so it is parsed with Text.from_ansi instead.
|
|
30
|
+
"""
|
|
31
|
+
marker = line.find(_ANSI_LINE_PREFIX)
|
|
32
|
+
if marker == -1:
|
|
33
|
+
return cell_len(Text.from_markup(line).plain)
|
|
34
|
+
text = Text.from_markup(line[:marker])
|
|
35
|
+
text.append_text(Text.from_ansi(line[marker + len(_ANSI_LINE_PREFIX):]))
|
|
36
|
+
return cell_len(text.plain)
|
|
37
|
+
|
|
17
38
|
|
|
18
39
|
@dataclass
|
|
19
40
|
class OutputNode:
|
|
@@ -617,15 +638,29 @@ class OutputTree:
|
|
|
617
638
|
|
|
618
639
|
|
|
619
640
|
def _full_width_row(line: str, width: int) -> str:
|
|
620
|
-
visible =
|
|
641
|
+
visible = _visible_len(line)
|
|
621
642
|
padding = " " * max(0, width - visible)
|
|
622
|
-
return
|
|
643
|
+
return _wrap_full_width(line, padding, USER_ROW_STYLE)
|
|
623
644
|
|
|
624
645
|
|
|
625
646
|
def _permission_row(line: str, width: int) -> str:
|
|
626
|
-
visible =
|
|
647
|
+
visible = _visible_len(line)
|
|
627
648
|
padding = " " * max(0, width - visible)
|
|
628
|
-
return
|
|
649
|
+
return _wrap_full_width(line, padding, "white on #3a3937")
|
|
650
|
+
|
|
651
|
+
|
|
652
|
+
def _wrap_full_width(line: str, padding: str, style: str) -> str:
|
|
653
|
+
"""Wrap a line with a background style and padding to full width.
|
|
654
|
+
|
|
655
|
+
When the line contains an ANSI_LINE_PREFIX marker, the closing tag and
|
|
656
|
+
padding must go *before* the marker so that _text_from_line parses them
|
|
657
|
+
with Text.from_markup (which understands tags) rather than leaving them
|
|
658
|
+
as literal text in the Text.from_ansi portion.
|
|
659
|
+
"""
|
|
660
|
+
marker = line.find(_ANSI_LINE_PREFIX)
|
|
661
|
+
if marker == -1:
|
|
662
|
+
return f"[{style}]{line}{padding}[/]"
|
|
663
|
+
return f"[{style}]{line[:marker]}{padding}[/]{line[marker:]}"
|
|
629
664
|
|
|
630
665
|
|
|
631
666
|
def _is_full_width_user_row(node: OutputNode) -> bool:
|
|
@@ -644,7 +679,7 @@ def _pad_diff_background_row(line: str, width: int) -> str:
|
|
|
644
679
|
marker = "[/on #4a0000]"
|
|
645
680
|
if not marker:
|
|
646
681
|
return line
|
|
647
|
-
visible =
|
|
682
|
+
visible = _visible_len(line)
|
|
648
683
|
padding = " " * max(0, width - visible)
|
|
649
684
|
return line.replace(marker, f"{padding}{marker}", 1)
|
|
650
685
|
|
|
@@ -7,6 +7,7 @@ from typing import Any
|
|
|
7
7
|
|
|
8
8
|
from voidx.config import Settings
|
|
9
9
|
from voidx.skills.service import SkillRegistry, SkillService
|
|
10
|
+
from voidx.ui.output.dock.formatting import _PASTED_RE
|
|
10
11
|
from voidx.ui.tools.attachment_tokens import attachment_token_text
|
|
11
12
|
from voidx.ui.tools.file_picker import (
|
|
12
13
|
AttachmentToken,
|
|
@@ -37,7 +38,12 @@ class _PanelManagerMixin:
|
|
|
37
38
|
# ── submit ───────────────────────────────────────────────────────────
|
|
38
39
|
|
|
39
40
|
def _submit_text_prompt(self) -> None:
|
|
40
|
-
value = self._get_input_text()
|
|
41
|
+
value = self._expand_registered_tokens(self._get_input_text())
|
|
42
|
+
# Clarify answers are plain text — strip <pasted> wrapper tags that
|
|
43
|
+
# _expand_registered_tokens adds (those tags are only consumed by the
|
|
44
|
+
# main input path's split_pasted_segments in start_turn rendering).
|
|
45
|
+
value = _PASTED_RE.sub(r"\1", value)
|
|
46
|
+
self._paste_entries.clear()
|
|
41
47
|
self._text_queue.put_nowait(value)
|
|
42
48
|
|
|
43
49
|
def _cancel_text_prompt(self) -> None:
|
|
@@ -101,9 +101,13 @@ class _InputParserMixin:
|
|
|
101
101
|
(multiple newlines or a long run), wraps them in a bracketed-paste
|
|
102
102
|
sequence so ``_process_paste`` handles them as a unit.
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
Returns the bracketed-paste bytes when the drained content looks
|
|
105
|
+
like a paste. Returns the raw bytes of ALL drained characters
|
|
106
|
+
(including ``first_char``) when they don't look like a paste —
|
|
107
|
+
this lets the caller process them in arrival order without
|
|
108
|
+
stashing extras into ``_pending_bytes``, which previously caused
|
|
109
|
+
IME/keyboard characters to be reordered across reads. Returns
|
|
110
|
+
``None`` when nothing follows ``first_char`` (a single keypress).
|
|
107
111
|
"""
|
|
108
112
|
import msvcrt
|
|
109
113
|
import time
|
|
@@ -132,12 +136,11 @@ class _InputParserMixin:
|
|
|
132
136
|
newline_count = buffer.count("\r") + buffer.count("\n")
|
|
133
137
|
if newline_count >= 2 or len(buffer) > 8:
|
|
134
138
|
return b"\x1b[200~" + buffer.encode("utf-8", errors="replace") + b"\x1b[201~"
|
|
135
|
-
# Not a paste:
|
|
136
|
-
#
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
return None
|
|
139
|
+
# Not a paste: return all drained chars as raw bytes so the caller
|
|
140
|
+
# processes them in arrival order. Previously, only first_char was
|
|
141
|
+
# returned and the rest was stashed in _pending_bytes, which caused
|
|
142
|
+
# fast IME/keyboard input to be reordered across reads.
|
|
143
|
+
return buffer.encode("utf-8", errors="replace")
|
|
141
144
|
|
|
142
145
|
async def _read_input_line(self) -> bytes:
|
|
143
146
|
"""Fallback: read a line from stdin (not a tty)."""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|