alysis-code 0.13.6__tar.gz → 0.13.6.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.
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/PKG-INFO +1 -1
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/docs/CHANGELOG.md +27 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/pyproject.toml +1 -1
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/__init__.py +1 -1
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/account_login.py +4 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/config_menu.py +117 -16
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/setup_wizard.py +1 -1
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/config_flow.py +52 -23
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/setup_flow.py +4 -4
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/profile_presets.py +13 -1
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/.gitignore +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/LICENSE +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/NOTICE +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/README.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/__main__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/_build_info.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/README.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/acceptance_contract.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/blast_radius.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/cache_keepalive.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/completion_certificate.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/completion_gate.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/empty_response_stall.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/errors.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/llm_calls.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/mutation_classification.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/prompt_context.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/read_ledger.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/regression_baseline.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/reproduction_first.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/sensitive_output.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/session.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/steering.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/subagent_execution.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/subagent_workspace.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/tools_assembly.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/turn/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/turn/core.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/turn/events.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/turn/exploration.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/turn/interventions.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/turn/read_cache.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/turn/snapshot.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/turn_contract.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/turn_path.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/verification.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/verification_commands.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/verification_evidence.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent_loop.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent_runtimes/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent_runtimes/base.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent_runtimes/builtins.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent_runtimes/codex_cli.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent_runtimes/host.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent_runtimes/registry.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent_runtimes/service.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agentbox_client.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agentbox_integration.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/alysis_cloud.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/approval_scope.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/README.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/asset_read_core.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/budget_allocator.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/comprehender.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/index.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/ingestion.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/legacy_migration.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/models.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/ocr.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-000.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-001.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-002.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-003.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-004.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-005.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-006.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-007.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-008.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-009.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-010.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-011.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-012.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-013.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-014.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-015.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-016.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-017.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-018.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-019.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/ascii/f-020.txt +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/index.html +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/owl/show-owl.sh +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/paths.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/plan_binding.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/planner_context.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/planner_tools.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/prompts.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/replanner_context.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/surface.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/untrusted_content.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/usage_logger.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/worker_mirror.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/worker_section.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/assets/worker_tools.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/atomic_io.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/auth_diagnostics.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/background_runner.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/branding.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/budget_policy.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/build_identity.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/builtin_hooks/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/builtin_hooks/notify_done_windows.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/bwrap_etc.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cancellation.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/capabilities.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/chatgpt_codex_static_provider.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/assets_cli.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/assets_modal.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/chat/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/chat/commands.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/chat/loop.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/chat/mid_turn_policy.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/chat/rendering.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/chat/state.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/chat_resume.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/chat_slash_completer.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/_shared.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/auth.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/chat_resume_helpers.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/chat_state.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/chat_status.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/chat_terminal.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/chat_tui_panels.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/cli_common.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/cli_surface.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/config.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/conventions.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/execution_helpers.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/extensions.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/forge.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/forge_asset_view.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/forge_helpers.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/hooks.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/ide_bridge.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/mcp.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/profile.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/prompt_helpers.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/report.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/root.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/sandbox.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/server.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/sessions.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/skills.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/startup.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/tools.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/update.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/commands/welcome.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/forge.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/forge_recovery.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/app.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/config.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/config_overlay.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/content.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/footer.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/forge_status.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/markdown.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/owl.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/plan_meta.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/selection_bindings.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/setup_app.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/state.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/subagent_identity.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/subagent_panel.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/surface.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/transcript.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/update_prompt.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/cli_impl/tui/workspace_guard.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/clipboard.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/code_review.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/compaction/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/compaction/conversation_compactor.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/compaction/importance.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/compaction/settings.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/compaction/tool_output_offload.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/config.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/conflict_auto_resolver.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/context/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/context/tool_schema_budgeter.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/crash_diagnostics.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/custom_tools/README.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/custom_tools/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/custom_tools/discovery.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/custom_tools/runtime.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/custom_tools/session.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/custom_tools/trust.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/diff_paths.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/direction_change.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/dispatch_timing.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/durable_service_manager.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/edit_discipline.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/error_text.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/execution_budget.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/execution_context.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/execution_deadline.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/execution_shared.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/extensions/README.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/extensions/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/extensions/activation.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/extensions/install.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/extensions/manifest.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/extensions/models.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/extensions/paths.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/extensions/registry.json +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/extensions/registry.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/extensions/state.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/extensions/workspace_trust.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/failed_task_evidence.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/failure_category.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/feedback_report.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/file_classification.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/forge.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/forge_completion.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/forge_events.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/frontmatter_utils.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/git_evidence.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/git_ops.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/git_safe.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/git_worktrees.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/hooks/README.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/hooks/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/hooks/audit.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/hooks/config.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/hooks/dispatcher.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/hooks/models.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/hooks/trust.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/host_actions.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/host_browser.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/activity_events.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/approvals.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/artifacts.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/browser_egress_proxy.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/cdp_websocket_transport.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/change_ledger.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/context_blocks.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/event_stream.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/forge_protocol.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/forge_request_ledger.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/health.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/managed_browser.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/management_protocol.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/mcp_oauth_coordinator.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/mcp_oauth_lifecycle.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/prompt_queue.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/protocol.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/resumable_swarm.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/session_search.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/stdio_bridge.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/structured_state.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/ide/swarm_protocol.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/integration_gate.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/interactive_input_guard.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/interactive_plan_mode.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/internal_artifacts.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/knowledge_base.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/knowledge_capture.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/knowledge_librarian.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/language_policy.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/litellm_static_provider.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/anthropic_messages.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/base.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/cache_capabilities.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/cache_control_blocks.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/cache_policy.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/factory.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/gemini_generate_content.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/gemini_interactions.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/metadata.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/openai_compat.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/openai_responses.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/protocols.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/provider_limits.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/request_plan.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/request_shape.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/streaming.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/temperature_compat.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/types.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm/usage_normalization.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/llm_error_display.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/logging_redaction.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/managed_host_deadline.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/README.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/client.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/config.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/errors.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/forge_scope.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/jsonrpc.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/manager.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/models.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/oauth.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/oauth_runtime.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/oauth_store.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/prompts.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/resources.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/roots.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/server_requests.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/token_store.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/transport_http.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/transport_stdio.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/mcp/untrusted_content.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/merge_conflict_reviewer.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/model_catalog/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/model_catalog/chatgpt_codex_subscription_snapshot.json +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.json +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.meta.json +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/model_metadata_policy.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/model_metadata_utils.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/model_registry.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/model_router.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/permission_policy.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/personas.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/pipeline_facts.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/plan_assistant.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/plan_mode.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/plan_reconciliation.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/plan_repair.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/plan_validation.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/planning_constraints.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/policy.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/preview_server.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/process_reaping.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/profiles.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/provider_auth/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/provider_auth/base.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/provider_auth/openai_codex.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/provider_auth/registry.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/provider_auth/store.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/provider_diagnostics.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/provider_model_catalog.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/provider_telemetry.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/provider_url.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/reasoning_contracts.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/remote_sync.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/replanning.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/repo_scan.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/request_estimation.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/review_gate.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/run_lock.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/run_outcome.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/run_provenance.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/run_state.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/runtime_artifacts.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/runtime_context_features.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/runtime_kind.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/safety/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/safety/mcp_sanitize.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/safety/safe_http.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/safety/subagent_report.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/sandbox_doctor.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/sandbox_runner.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/sandbox_settings.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/serialized_paths.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/server/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/server/app.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/server/auth.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/server/job_config.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/server/settings.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/server/store.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/server/worker_runner.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/service_persistence.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/session_artifacts.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/session_metrics.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/session_store.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/README.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/bundled/address-pr-comments/SKILL.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/bundled/code-review/SKILL.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/bundled/commit/SKILL.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/bundled/debug/SKILL.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/bundled/fix-ci/SKILL.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/bundled/release-notes/SKILL.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/bundled/security-review/SKILL.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/bundled/skill-creator/SKILL.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/conventions.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/discovery.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/eval_models.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/eval_runner.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/evals.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/install.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/loader.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/matching.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/models.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/paths.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/prompting.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/scaffold.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/selection.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/state.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/transactions.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/skills/validation.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/step_budget.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/subagent_labels.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/subagents.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/surface/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/surface/base.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/surface/console.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/surface/events.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/surface/hidden_surface.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/surface/noop_surface.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/surface/rich_surface.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/surface/styles.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/surface/theme.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/surface/types.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/swarm_backend.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/swarm_orchestrator.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/swarm_scheduler.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/swarm_trace.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/swarm_worker.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/swarm_write_guard.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/task_dependencies.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/task_readiness.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/task_scope.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/terminal_manager.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/terminal_ownership.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/text_normalization.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/token_budget.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/README.md +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/__init__.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/artifacts.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/availability.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/fs.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/git.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/history.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/http_timeout.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/image_generation.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/registry.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/repo_map.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/search.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/shell.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/symbols.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/test_discovery.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/web.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/web_search.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/web_search_dashscope.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/web_search_ddgs.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/web_search_provider_adapters.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/tools/web_search_tavily.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/transport_retry.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/updates.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/usage_tracker.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/verification_command_analysis.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/verification_contract.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/verification_failure_summary.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/verification_repair.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/verify_gate.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/web_research.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/web_search_adapters.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/web_search_policy.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/workspace_binding.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/workspace_binding_ui.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/workspace_context.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/workspace_isolation.py +0 -0
- {alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/workspace_provisioning.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: alysis-code
|
|
3
|
-
Version: 0.13.6
|
|
3
|
+
Version: 0.13.6.2
|
|
4
4
|
Summary: Local CLI coding agent powered by any API.
|
|
5
5
|
Project-URL: Changelog, https://github.com/AlysisAi/alysis-code/blob/main/docs/CHANGELOG.md
|
|
6
6
|
Project-URL: Documentation, https://github.com/AlysisAi/alysis-code/tree/main/docs
|
|
@@ -408,6 +408,33 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
408
408
|
Workspace-target extraction also keeps extensionless dotfiles such as `.npmrc` available to
|
|
409
409
|
verification selection.
|
|
410
410
|
|
|
411
|
+
## [0.13.6.2] - 2026-09-08
|
|
412
|
+
|
|
413
|
+
### Fixed
|
|
414
|
+
|
|
415
|
+
- **Alysis Code account setup and configuration use subscription controls.**
|
|
416
|
+
Setup identifies the Alysis Code endpoint without the retired MiMo label.
|
|
417
|
+
Hosted profiles show Alysis Code subscription access and account sign-in,
|
|
418
|
+
reconnect, and disconnect controls instead of an API-key editor.
|
|
419
|
+
- **Hosted model changes no longer ask for a base URL.** The managed endpoint
|
|
420
|
+
stays in place through model selection and back navigation. Custom and BYOK
|
|
421
|
+
providers keep their endpoint settings.
|
|
422
|
+
- **Switching to an Alysis Code account keeps the correct connection.** Signing
|
|
423
|
+
in refreshes the full active profile before configuration is saved, preventing
|
|
424
|
+
the previous provider's URL from overwriting the hosted endpoint. Login also
|
|
425
|
+
switches back to the native agent from a selected delegated runtime. Account
|
|
426
|
+
status reflects the Alysis login, including after logout when an unrelated
|
|
427
|
+
provider key is still saved.
|
|
428
|
+
|
|
429
|
+
## [0.13.6.1] - 2026-09-08
|
|
430
|
+
|
|
431
|
+
### Fixed
|
|
432
|
+
|
|
433
|
+
- **V4.1 Flash beta on Alysis Code Pro.** The Pro model picker now includes
|
|
434
|
+
`deepseek-v4.1-flash-expires-on-0910` and `deepseek-v4-flash-vision-exp`
|
|
435
|
+
with descriptions. Newly discovered models are captioned "available on your
|
|
436
|
+
Alysis Code Pro plan" instead of the retired MiMo "trial" wording.
|
|
437
|
+
|
|
411
438
|
## [0.13.6] - 2026-09-08
|
|
412
439
|
|
|
413
440
|
### Added
|
|
@@ -479,6 +479,10 @@ def _activate_alysis_profile(cfg: AppConfig, *, email: str | None) -> LoginResul
|
|
|
479
479
|
|
|
480
480
|
add_profile(cfg, profile)
|
|
481
481
|
set_active_profile(cfg, profile.name)
|
|
482
|
+
# Hosted account access uses the native agent loop. Keep configured
|
|
483
|
+
# delegated runtimes available, but stop routing this session through one.
|
|
484
|
+
cfg.execution.backend = "native"
|
|
485
|
+
cfg.execution.runtime = None
|
|
482
486
|
save_config(cfg)
|
|
483
487
|
|
|
484
488
|
return LoginResult(
|
|
@@ -227,6 +227,7 @@ class ConfigMenuState:
|
|
|
227
227
|
_provider_models_cache_identity: tuple[str, str, str] | None = field(default=None, repr=False)
|
|
228
228
|
_provider_models_cache: tuple[ProviderModelOption, ...] = field(default=(), repr=False)
|
|
229
229
|
_provider_model_catalog_warning: str = field(default="", repr=False)
|
|
230
|
+
_account_changed: bool = field(default=False, repr=False)
|
|
230
231
|
_original: dict[str, Any] = field(default_factory=dict, repr=False)
|
|
231
232
|
|
|
232
233
|
@classmethod
|
|
@@ -1115,7 +1116,9 @@ class ConfigMenuState:
|
|
|
1115
1116
|
return ConfigMenuResult(
|
|
1116
1117
|
saved=True,
|
|
1117
1118
|
changes=changes,
|
|
1118
|
-
api_key_changed=bool(
|
|
1119
|
+
api_key_changed=bool(
|
|
1120
|
+
self.new_api_key.strip() or self.clear_stored_key_confirmed or self._account_changed
|
|
1121
|
+
),
|
|
1119
1122
|
)
|
|
1120
1123
|
|
|
1121
1124
|
def validate(self) -> str | None:
|
|
@@ -1309,7 +1312,9 @@ def run_config_menu(
|
|
|
1309
1312
|
if result.saved or result.error is None:
|
|
1310
1313
|
return result
|
|
1311
1314
|
elif action == "cancel" and _confirm_cancel_when_dirty(state, console):
|
|
1312
|
-
return ConfigMenuResult(
|
|
1315
|
+
return ConfigMenuResult(
|
|
1316
|
+
saved=state._account_changed, changes={}, api_key_changed=state._account_changed
|
|
1317
|
+
)
|
|
1313
1318
|
|
|
1314
1319
|
|
|
1315
1320
|
def _resolve_console() -> Console:
|
|
@@ -1317,6 +1322,8 @@ def _resolve_console() -> Console:
|
|
|
1317
1322
|
|
|
1318
1323
|
|
|
1319
1324
|
def _execution_summary_text(state: ConfigMenuState) -> str:
|
|
1325
|
+
if _active_alysis_profile(state) is not None:
|
|
1326
|
+
return "Alysis Code subscription"
|
|
1320
1327
|
if state.execution_backend == "native":
|
|
1321
1328
|
return "API key · Alysis Code agent"
|
|
1322
1329
|
runtime = str(state.execution_runtime or "").strip()
|
|
@@ -1326,6 +1333,25 @@ def _execution_summary_text(state: ConfigMenuState) -> str:
|
|
|
1326
1333
|
return f"AI subscription · {labels.get(runtime, runtime)}"
|
|
1327
1334
|
|
|
1328
1335
|
|
|
1336
|
+
def _active_alysis_profile(state: ConfigMenuState) -> ProfileSpec | None:
|
|
1337
|
+
"""Recognize hosted account access by its effective endpoint, not its model or key."""
|
|
1338
|
+
from .. import alysis_cloud
|
|
1339
|
+
|
|
1340
|
+
if state.execution_backend != "native" or state.active_profile not in state.profiles:
|
|
1341
|
+
return None
|
|
1342
|
+
profile = ProfileSpec.from_dict(state.active_profile, state.profiles[state.active_profile])
|
|
1343
|
+
if profile.auth_provider or profile.protocol != OPENAI_COMPAT_PROTOCOL:
|
|
1344
|
+
return None
|
|
1345
|
+
effective_url = str(state.fields.get("base_url") or profile.base_url).strip().rstrip("/")
|
|
1346
|
+
preset = next(p for p in PROFILE_PRESETS if p.key == alysis_cloud.PROFILE_KEY)
|
|
1347
|
+
hosted_urls = {preset.base_url.strip().rstrip("/")}
|
|
1348
|
+
try:
|
|
1349
|
+
hosted_urls.add(alysis_cloud.gateway_base_url().strip().rstrip("/"))
|
|
1350
|
+
except alysis_cloud.AlysisCloudConfigError:
|
|
1351
|
+
pass
|
|
1352
|
+
return profile if effective_url in hosted_urls else None
|
|
1353
|
+
|
|
1354
|
+
|
|
1329
1355
|
def _inactive_native_summary(summary: str) -> str:
|
|
1330
1356
|
if summary == _MISSING_REQUIRED:
|
|
1331
1357
|
base = "not configured"
|
|
@@ -1615,9 +1641,12 @@ def _top_level_menu_rows(state: ConfigMenuState) -> list[tuple[str, str, str]]:
|
|
|
1615
1641
|
api_key_summary = "not used · managed by AI subscription"
|
|
1616
1642
|
native_suffix = " (inactive)" if delegated else ""
|
|
1617
1643
|
api_key_suffix = " (not used)" if direct_subscription else native_suffix
|
|
1644
|
+
hosted_account = _active_alysis_profile(state) is not None
|
|
1645
|
+
if hosted_account:
|
|
1646
|
+
api_key_summary = "Manage your Alysis Code subscription connection"
|
|
1618
1647
|
return [
|
|
1619
1648
|
("profile", f"Provider Profile{native_suffix}", profile_summary),
|
|
1620
|
-
("api_key", f"API Key{api_key_suffix}", api_key_summary),
|
|
1649
|
+
("api_key", "Account" if hosted_account else f"API Key{api_key_suffix}", api_key_summary),
|
|
1621
1650
|
("default", f"Default Model{native_suffix}", model_summary),
|
|
1622
1651
|
("web_search", "Web Search", _web_search_summary_text(state)),
|
|
1623
1652
|
("cache", "Context & Cache", _cache_summary_text(state)),
|
|
@@ -1634,7 +1663,10 @@ def _top_level_menu_rows(state: ConfigMenuState) -> list[tuple[str, str, str]]:
|
|
|
1634
1663
|
|
|
1635
1664
|
|
|
1636
1665
|
def _run_execution_section(state: ConfigMenuState, console: Console) -> None:
|
|
1666
|
+
from ..alysis_cloud import PROFILE_KEY
|
|
1667
|
+
|
|
1637
1668
|
while True:
|
|
1669
|
+
hosted_account = _active_alysis_profile(state) is not None
|
|
1638
1670
|
selected_backend = _run_config_picker(
|
|
1639
1671
|
console=console,
|
|
1640
1672
|
title="Model Access",
|
|
@@ -1651,23 +1683,28 @@ def _run_execution_section(state: ConfigMenuState, console: Console) -> None:
|
|
|
1651
1683
|
"Sign in through a supported provider connection; API-key settings stay saved.",
|
|
1652
1684
|
),
|
|
1653
1685
|
],
|
|
1654
|
-
current_value=state.execution_backend,
|
|
1686
|
+
current_value="delegated" if hosted_account else state.execution_backend,
|
|
1655
1687
|
)
|
|
1656
1688
|
if selected_backend is None:
|
|
1657
1689
|
_print_section_cancelled(console, "Model Access")
|
|
1658
1690
|
return
|
|
1659
1691
|
if selected_backend == "native":
|
|
1660
1692
|
state.set_execution_backend("native")
|
|
1693
|
+
if hosted_account:
|
|
1694
|
+
_run_provider_section(state, console)
|
|
1695
|
+
return
|
|
1661
1696
|
console.print("[green]Model access:[/green] API key. Save to apply.")
|
|
1662
1697
|
return
|
|
1663
1698
|
|
|
1664
|
-
rows =
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
"
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1699
|
+
rows = [
|
|
1700
|
+
(
|
|
1701
|
+
PROFILE_KEY,
|
|
1702
|
+
"Alysis Code account",
|
|
1703
|
+
"Connect your Alysis Code subscription in the browser.",
|
|
1704
|
+
),
|
|
1705
|
+
*_runtime_setup_rows(),
|
|
1706
|
+
]
|
|
1707
|
+
current_runtime = PROFILE_KEY if hosted_account else state.execution_runtime
|
|
1671
1708
|
if current_runtime not in {value for value, _label, _description in rows}:
|
|
1672
1709
|
current_runtime = rows[0][0]
|
|
1673
1710
|
selected_runtime = _run_config_picker(
|
|
@@ -1682,6 +1719,9 @@ def _run_execution_section(state: ConfigMenuState, console: Console) -> None:
|
|
|
1682
1719
|
)
|
|
1683
1720
|
if selected_runtime is None:
|
|
1684
1721
|
continue
|
|
1722
|
+
if selected_runtime == PROFILE_KEY:
|
|
1723
|
+
_run_alysis_account_section(state, console)
|
|
1724
|
+
return
|
|
1685
1725
|
state.set_execution_backend("delegated", runtime=selected_runtime)
|
|
1686
1726
|
runtime_label = next(
|
|
1687
1727
|
(label for value, label, _description in rows if value == selected_runtime),
|
|
@@ -1695,6 +1735,59 @@ def _run_execution_section(state: ConfigMenuState, console: Console) -> None:
|
|
|
1695
1735
|
return
|
|
1696
1736
|
|
|
1697
1737
|
|
|
1738
|
+
def _run_alysis_account_section(state: ConfigMenuState, console: Console) -> None:
|
|
1739
|
+
from .. import account_login
|
|
1740
|
+
from ..alysis_cloud import PROFILE_KEY
|
|
1741
|
+
from ..profiles import get_profile
|
|
1742
|
+
|
|
1743
|
+
while True:
|
|
1744
|
+
cfg = load_config()
|
|
1745
|
+
status = account_login.login_status(cfg)
|
|
1746
|
+
rows = [
|
|
1747
|
+
(
|
|
1748
|
+
"connect",
|
|
1749
|
+
"Reconnect / switch account" if status.logged_in else "Connect account",
|
|
1750
|
+
"Open Alysis Code sign-in in your browser.",
|
|
1751
|
+
)
|
|
1752
|
+
]
|
|
1753
|
+
if status.logged_in:
|
|
1754
|
+
rows.append(
|
|
1755
|
+
("disconnect", "Disconnect account", "Remove your saved account connection.")
|
|
1756
|
+
)
|
|
1757
|
+
rows.append(("back", "Back", "Return to configuration."))
|
|
1758
|
+
action = _run_config_picker(
|
|
1759
|
+
console=console,
|
|
1760
|
+
title="Alysis Code Account",
|
|
1761
|
+
subtitle="Account: connected" if status.logged_in else "Account: not connected",
|
|
1762
|
+
rows=rows,
|
|
1763
|
+
current_value="back",
|
|
1764
|
+
)
|
|
1765
|
+
if action in {None, "back"}:
|
|
1766
|
+
return
|
|
1767
|
+
try:
|
|
1768
|
+
if action == "disconnect":
|
|
1769
|
+
if not _prompt_yes_no("Disconnect your Alysis Code account? [y/N]"):
|
|
1770
|
+
continue
|
|
1771
|
+
account_login.logout(cfg)
|
|
1772
|
+
state._account_changed = True
|
|
1773
|
+
state.refresh_api_key_status()
|
|
1774
|
+
console.print("[yellow]Alysis Code account disconnected.[/yellow]")
|
|
1775
|
+
continue
|
|
1776
|
+
account_login.login(
|
|
1777
|
+
cfg,
|
|
1778
|
+
output_write=lambda message: console.print(message, highlight=False),
|
|
1779
|
+
)
|
|
1780
|
+
profile = get_profile(cfg, PROFILE_KEY)
|
|
1781
|
+
if profile is not None:
|
|
1782
|
+
state.profiles[PROFILE_KEY] = profile.to_dict()
|
|
1783
|
+
state.set_active_profile_name(PROFILE_KEY)
|
|
1784
|
+
state.set_execution_backend("native")
|
|
1785
|
+
state._account_changed = True
|
|
1786
|
+
console.print("[green]Alysis Code account connected.[/green]")
|
|
1787
|
+
except (account_login.AlysisLoginError, ConfigError) as exc:
|
|
1788
|
+
console.print(f"[red]Alysis Code account action failed:[/red] {escape(str(exc))}")
|
|
1789
|
+
|
|
1790
|
+
|
|
1698
1791
|
def _run_subscription_account_section(provider_id: str, console: Console) -> None:
|
|
1699
1792
|
from ..provider_auth import ProviderAuthError, create_provider_auth
|
|
1700
1793
|
|
|
@@ -2647,7 +2740,7 @@ def _run_profile_edit_current(state: ConfigMenuState, console: Console) -> None:
|
|
|
2647
2740
|
)
|
|
2648
2741
|
return
|
|
2649
2742
|
profile = ProfileSpec.from_dict(state.active_profile, state.profiles[state.active_profile])
|
|
2650
|
-
if profile.auth_provider:
|
|
2743
|
+
if profile.auth_provider or _active_alysis_profile(state) is not None:
|
|
2651
2744
|
console.print(
|
|
2652
2745
|
"[yellow]This subscription connection is provider-managed. Use Default Model "
|
|
2653
2746
|
"to choose its model and reasoning effort.[/yellow]"
|
|
@@ -2770,6 +2863,9 @@ def _run_profile_remove(state: ConfigMenuState, console: Console) -> None:
|
|
|
2770
2863
|
|
|
2771
2864
|
|
|
2772
2865
|
def _run_api_key_section(state: ConfigMenuState, console: Console) -> None:
|
|
2866
|
+
if _active_alysis_profile(state) is not None:
|
|
2867
|
+
_run_alysis_account_section(state, console)
|
|
2868
|
+
return
|
|
2773
2869
|
console.print()
|
|
2774
2870
|
console.rule("[bold]API Key[/bold]")
|
|
2775
2871
|
if state.execution_backend == "delegated":
|
|
@@ -2808,6 +2904,7 @@ def _run_default_section(state: ConfigMenuState, console: Console) -> None:
|
|
|
2808
2904
|
console.print()
|
|
2809
2905
|
console.rule("[bold]Default Model[/bold]")
|
|
2810
2906
|
direct_subscription = _active_subscription_profile(state) is not None
|
|
2907
|
+
hosted_account = _active_alysis_profile(state) is not None
|
|
2811
2908
|
if state.execution_backend == "delegated" and not direct_subscription:
|
|
2812
2909
|
console.print(
|
|
2813
2910
|
"[yellow]This API-key model is preserved but inactive while an AI subscription is selected.[/yellow]"
|
|
@@ -2820,7 +2917,7 @@ def _run_default_section(state: ConfigMenuState, console: Console) -> None:
|
|
|
2820
2917
|
model = _prompt_default_model(console, state)
|
|
2821
2918
|
base_url = (
|
|
2822
2919
|
state.fields["base_url"]
|
|
2823
|
-
if direct_subscription
|
|
2920
|
+
if direct_subscription or hosted_account
|
|
2824
2921
|
else _prompt_text("Base URL", state.fields["base_url"])
|
|
2825
2922
|
)
|
|
2826
2923
|
state.set_field("base_url", base_url)
|
|
@@ -3104,8 +3201,9 @@ def _preset_model_option_rows(
|
|
|
3104
3201
|
|
|
3105
3202
|
NVIDIA's API catalog contains both NVIDIA and third-party models, so its live
|
|
3106
3203
|
``/v1/models`` inventory is merged with a small curated recommendation set.
|
|
3107
|
-
The hosted
|
|
3108
|
-
best-effort and offline-safe: on failure the static
|
|
3204
|
+
The hosted Alysis Code Pro gateway similarly appends its live ``/v1/models``
|
|
3205
|
+
allowlist. Discovery is best-effort and offline-safe: on failure the static
|
|
3206
|
+
rows still render.
|
|
3109
3207
|
"""
|
|
3110
3208
|
rows = list(model_options_for_preset(preset))
|
|
3111
3209
|
|
|
@@ -3155,7 +3253,10 @@ def _preset_model_option_rows(
|
|
|
3155
3253
|
if any(_same_model(model_id, existing) for existing in known):
|
|
3156
3254
|
continue
|
|
3157
3255
|
known.append(model_id)
|
|
3158
|
-
|
|
3256
|
+
# A model the gateway serves but the client predates: the preset may
|
|
3257
|
+
# still describe it; otherwise say where it comes from.
|
|
3258
|
+
description = str(preset.suggested_model_descriptions.get(model_id) or "").strip()
|
|
3259
|
+
rows.append((model_id, model_id, description or "available on your Alysis Code Pro plan"))
|
|
3159
3260
|
return rows
|
|
3160
3261
|
|
|
3161
3262
|
|
|
@@ -333,7 +333,7 @@ def run_setup_wizard() -> bool:
|
|
|
333
333
|
def _maybe_offer_alysis_login(
|
|
334
334
|
console: Console, *, profile_result: _ProfileStepResult, cfg: AppConfig
|
|
335
335
|
) -> None:
|
|
336
|
-
"""If the user chose the hosted
|
|
336
|
+
"""If the user chose the hosted Alysis Code preset, offer to connect now.
|
|
337
337
|
|
|
338
338
|
That preset authenticates via `alysis login` instead of an API key.
|
|
339
339
|
Running the handshake here saves a separate step; declining is harmless (the
|
|
@@ -73,6 +73,7 @@ from ..config_menu import (
|
|
|
73
73
|
ROLE_ORDER,
|
|
74
74
|
ConfigMenuResult,
|
|
75
75
|
ConfigMenuState,
|
|
76
|
+
_active_alysis_profile,
|
|
76
77
|
_active_preset,
|
|
77
78
|
_active_subscription_profile,
|
|
78
79
|
_advanced_profile_presets_for_setup,
|
|
@@ -178,7 +179,7 @@ def _pretty_key_source(source: str | None) -> str:
|
|
|
178
179
|
|
|
179
180
|
def _short_preset_description(preset: Any) -> str:
|
|
180
181
|
if preset.key == "alysis":
|
|
181
|
-
return "
|
|
182
|
+
return "Alysis Code endpoint — account sign-in"
|
|
182
183
|
short = _NATIVE_PROTOCOL_SHORT.get(preset.protocol)
|
|
183
184
|
if short:
|
|
184
185
|
return short
|
|
@@ -608,6 +609,7 @@ class ConfigFlow:
|
|
|
608
609
|
direct_sub = st.execution_backend == "delegated" and _is_direct_subscription_id(
|
|
609
610
|
st.execution_runtime
|
|
610
611
|
)
|
|
612
|
+
hosted_account = _active_alysis_profile(st) is not None
|
|
611
613
|
native_suffix = " (inactive)" if delegated else ""
|
|
612
614
|
profile_desc, profile_tone = self._short_profile(delegated)
|
|
613
615
|
model_desc, model_tone = self._short_model(delegated)
|
|
@@ -637,7 +639,7 @@ class ConfigFlow:
|
|
|
637
639
|
# The status ("not used" / "inactive") lives in the description —
|
|
638
640
|
# repeating it as a label suffix read twice on one row.
|
|
639
641
|
Row(
|
|
640
|
-
label="API Key",
|
|
642
|
+
label="Account" if hosted_account else "API Key",
|
|
641
643
|
description=key_desc,
|
|
642
644
|
value="api_key",
|
|
643
645
|
tone=key_tone,
|
|
@@ -691,6 +693,8 @@ class ConfigFlow:
|
|
|
691
693
|
|
|
692
694
|
def _short_execution(self) -> tuple[str, str]:
|
|
693
695
|
st = self.state
|
|
696
|
+
if _active_alysis_profile(st) is not None:
|
|
697
|
+
return "Alysis Code subscription", ""
|
|
694
698
|
if st.execution_backend == "native":
|
|
695
699
|
return "API key", ""
|
|
696
700
|
runtime = str(st.execution_runtime or "").strip()
|
|
@@ -718,6 +722,12 @@ class ConfigFlow:
|
|
|
718
722
|
return "not used", ""
|
|
719
723
|
if delegated:
|
|
720
724
|
return "inactive", ""
|
|
725
|
+
if _active_alysis_profile(self.state) is not None:
|
|
726
|
+
from ... import account_login
|
|
727
|
+
|
|
728
|
+
if account_login.login_status(self.cfg).logged_in:
|
|
729
|
+
return "connected", ""
|
|
730
|
+
return "not connected — sign in", "warn"
|
|
721
731
|
raw = _api_key_summary_text(self.state)
|
|
722
732
|
if raw == _MISSING_REQUIRED:
|
|
723
733
|
return "missing — required", "warn"
|
|
@@ -742,6 +752,7 @@ class ConfigFlow:
|
|
|
742
752
|
return f"subagents {sub} · forge {forge}"
|
|
743
753
|
|
|
744
754
|
def _screen_execution_backend(self) -> Screen:
|
|
755
|
+
hosted_account = _active_alysis_profile(self.state) is not None
|
|
745
756
|
return Screen(
|
|
746
757
|
stage="execution_backend",
|
|
747
758
|
mode="list",
|
|
@@ -752,7 +763,7 @@ class ConfigFlow:
|
|
|
752
763
|
label="Use an API key",
|
|
753
764
|
description="Connect directly to a supported model provider.",
|
|
754
765
|
value="native",
|
|
755
|
-
current=self.state.execution_backend == "native",
|
|
766
|
+
current=self.state.execution_backend == "native" and not hosted_account,
|
|
756
767
|
),
|
|
757
768
|
Row(
|
|
758
769
|
label="Use an AI subscription",
|
|
@@ -760,7 +771,7 @@ class ConfigFlow:
|
|
|
760
771
|
"Sign in through a supported provider connection; API-key settings stay saved."
|
|
761
772
|
),
|
|
762
773
|
value="delegated",
|
|
763
|
-
current=self.state.execution_backend == "delegated",
|
|
774
|
+
current=self.state.execution_backend == "delegated" or hosted_account,
|
|
764
775
|
),
|
|
765
776
|
],
|
|
766
777
|
hint="",
|
|
@@ -775,10 +786,7 @@ class ConfigFlow:
|
|
|
775
786
|
label="Alysis Code account",
|
|
776
787
|
description="Free daily DeepSeek included — browser sign-in, no API key.",
|
|
777
788
|
value=_ALYSIS_CONNECTION_ID,
|
|
778
|
-
current=(
|
|
779
|
-
self.state.execution_backend == "native"
|
|
780
|
-
and self.state.active_profile == _ALYSIS_CONNECTION_ID
|
|
781
|
-
),
|
|
789
|
+
current=_active_alysis_profile(self.state) is not None,
|
|
782
790
|
)
|
|
783
791
|
]
|
|
784
792
|
rows.extend(
|
|
@@ -1845,6 +1853,12 @@ class ConfigFlow:
|
|
|
1845
1853
|
if self.stage == "cancel_confirm":
|
|
1846
1854
|
self._goto(self._resume_stage or "menu")
|
|
1847
1855
|
return
|
|
1856
|
+
if self.stage == "model_thinking" and (
|
|
1857
|
+
_active_subscription_profile(self.state) is not None
|
|
1858
|
+
or _active_alysis_profile(self.state) is not None
|
|
1859
|
+
):
|
|
1860
|
+
self._goto("model", index=self._model_index())
|
|
1861
|
+
return
|
|
1848
1862
|
prev = _PREV.get(self.stage)
|
|
1849
1863
|
if prev is not None:
|
|
1850
1864
|
self._goto(prev)
|
|
@@ -1886,7 +1900,10 @@ class ConfigFlow:
|
|
|
1886
1900
|
elif value == "profile":
|
|
1887
1901
|
self._goto("provider")
|
|
1888
1902
|
elif value == "api_key":
|
|
1889
|
-
self.
|
|
1903
|
+
if _active_alysis_profile(self.state) is not None:
|
|
1904
|
+
self._choose_execution_runtime(_ALYSIS_CONNECTION_ID)
|
|
1905
|
+
else:
|
|
1906
|
+
self._goto("api_key")
|
|
1890
1907
|
elif value == "default":
|
|
1891
1908
|
self.open_default_model()
|
|
1892
1909
|
elif value == "web_search":
|
|
@@ -1903,10 +1920,17 @@ class ConfigFlow:
|
|
|
1903
1920
|
self._goto("personas", index=self._persona_index())
|
|
1904
1921
|
|
|
1905
1922
|
def _execution_backend_index(self) -> int:
|
|
1906
|
-
return
|
|
1923
|
+
return int(
|
|
1924
|
+
self.state.execution_backend == "delegated"
|
|
1925
|
+
or _active_alysis_profile(self.state) is not None
|
|
1926
|
+
)
|
|
1907
1927
|
|
|
1908
1928
|
def _choose_execution_backend(self, value: str) -> None:
|
|
1909
1929
|
if value == "native":
|
|
1930
|
+
if _active_alysis_profile(self.state) is not None:
|
|
1931
|
+
self._goto("provider")
|
|
1932
|
+
self._set_status("Choose or add an API-key provider profile.", "dim")
|
|
1933
|
+
return
|
|
1910
1934
|
self.state.set_execution_backend("native")
|
|
1911
1935
|
self._goto("menu")
|
|
1912
1936
|
self._set_status("API-key model access selected. Save to apply.", "ok")
|
|
@@ -1915,10 +1939,9 @@ class ConfigFlow:
|
|
|
1915
1939
|
self._set_status(f"Unknown model access method: {value}", "err")
|
|
1916
1940
|
return
|
|
1917
1941
|
rows = _runtime_setup_rows()
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
runtime_ids = [runtime_id for runtime_id, _label, _description in rows]
|
|
1942
|
+
runtime_ids = [_ALYSIS_CONNECTION_ID] + [
|
|
1943
|
+
runtime_id for runtime_id, _label, _description in rows
|
|
1944
|
+
]
|
|
1922
1945
|
index = (
|
|
1923
1946
|
runtime_ids.index(self.state.execution_runtime)
|
|
1924
1947
|
if self.state.execution_runtime in runtime_ids
|
|
@@ -2089,7 +2112,10 @@ class ConfigFlow:
|
|
|
2089
2112
|
self.state.set_field("model", value)
|
|
2090
2113
|
if self._finish_preset_chain_if_active(model=value):
|
|
2091
2114
|
return
|
|
2092
|
-
if
|
|
2115
|
+
if (
|
|
2116
|
+
_active_subscription_profile(self.state) is not None
|
|
2117
|
+
or _active_alysis_profile(self.state) is not None
|
|
2118
|
+
):
|
|
2093
2119
|
labels = _thinking_labels_for_state(self.state, model=value)
|
|
2094
2120
|
if self.state.thinking_label not in labels:
|
|
2095
2121
|
self.state.set_thinking_label("auto")
|
|
@@ -2105,7 +2131,13 @@ class ConfigFlow:
|
|
|
2105
2131
|
self.state.set_field("model", model)
|
|
2106
2132
|
if self._finish_preset_chain_if_active(model=model):
|
|
2107
2133
|
return
|
|
2108
|
-
|
|
2134
|
+
if (
|
|
2135
|
+
_active_subscription_profile(self.state) is not None
|
|
2136
|
+
or _active_alysis_profile(self.state) is not None
|
|
2137
|
+
):
|
|
2138
|
+
self._goto("model_thinking", index=self._thinking_index())
|
|
2139
|
+
else:
|
|
2140
|
+
self._goto("model_base_url")
|
|
2109
2141
|
|
|
2110
2142
|
def _submit_model_base_url(self, text: str) -> None:
|
|
2111
2143
|
value = text.strip() or str(self.state.fields.get("base_url", ""))
|
|
@@ -2505,7 +2537,7 @@ class ConfigFlow:
|
|
|
2505
2537
|
profile = ProfileSpec.from_dict(
|
|
2506
2538
|
self.state.active_profile, self.state.profiles[self.state.active_profile]
|
|
2507
2539
|
)
|
|
2508
|
-
if profile.auth_provider:
|
|
2540
|
+
if profile.auth_provider or _active_alysis_profile(self.state) is not None:
|
|
2509
2541
|
self._set_status(
|
|
2510
2542
|
"This subscription connection is provider-managed. Use Default model for "
|
|
2511
2543
|
"model and reasoning choices.",
|
|
@@ -2731,24 +2763,21 @@ class ConfigFlow:
|
|
|
2731
2763
|
if kind == "connected":
|
|
2732
2764
|
# login() already activated + saved the alysis profile in cfg;
|
|
2733
2765
|
# mirror it into the TUI state so a later Save is consistent.
|
|
2734
|
-
result = getattr(self, "_alysis_login_result", None)
|
|
2735
2766
|
self._alysis_login_result = None
|
|
2736
2767
|
from ...profiles import get_profile
|
|
2737
2768
|
|
|
2738
2769
|
profile = get_profile(self.cfg, _ALYSIS_CONNECTION_ID)
|
|
2739
2770
|
if profile is not None:
|
|
2740
2771
|
self.state.profiles[_ALYSIS_CONNECTION_ID] = profile.to_dict()
|
|
2741
|
-
|
|
2772
|
+
self.state.set_active_profile_name(_ALYSIS_CONNECTION_ID)
|
|
2742
2773
|
self.state.set_execution_backend("native")
|
|
2743
|
-
model = str(getattr(result, "model", "") or "").strip()
|
|
2744
|
-
if model:
|
|
2745
|
-
self.state.fields["model"] = model
|
|
2746
2774
|
self._goto("subscription_account")
|
|
2747
2775
|
self._set_status(
|
|
2748
|
-
"Alysis Code connected
|
|
2776
|
+
"Alysis Code subscription connected. Esc to exit config.",
|
|
2749
2777
|
"ok",
|
|
2750
2778
|
)
|
|
2751
2779
|
else:
|
|
2780
|
+
self.state.refresh_api_key_status()
|
|
2752
2781
|
self._goto("subscription_account")
|
|
2753
2782
|
self._set_status(
|
|
2754
2783
|
"Logged out. Hosted requests will be refused until you sign in again.",
|
|
@@ -256,7 +256,7 @@ class SetupFlow:
|
|
|
256
256
|
else "thread"
|
|
257
257
|
)
|
|
258
258
|
|
|
259
|
-
def
|
|
259
|
+
def _hosted_alysis(self) -> bool:
|
|
260
260
|
preset = self.profile_result.preset if self.profile_result else None
|
|
261
261
|
if preset is None:
|
|
262
262
|
return False
|
|
@@ -636,7 +636,7 @@ class SetupFlow:
|
|
|
636
636
|
stage="login_confirm",
|
|
637
637
|
mode="confirm",
|
|
638
638
|
title="Alysis Code account",
|
|
639
|
-
subtitle="Your provider is the Alysis Code
|
|
639
|
+
subtitle="Your provider is the Alysis Code endpoint.",
|
|
640
640
|
lines=[("Connect your Alysis Code account now?", "plain")],
|
|
641
641
|
hint="Y connect · N later · Esc skip",
|
|
642
642
|
confirm_default=True,
|
|
@@ -1073,7 +1073,7 @@ class SetupFlow:
|
|
|
1073
1073
|
self._model_catalog_warning = ""
|
|
1074
1074
|
self.profile_result = new
|
|
1075
1075
|
warning = (preset.setup_warning or "").strip()
|
|
1076
|
-
if self.
|
|
1076
|
+
if self._hosted_alysis():
|
|
1077
1077
|
# The Alysis Code account needs no API key and login picks the
|
|
1078
1078
|
# hosted default model — skip both steps and head straight to the
|
|
1079
1079
|
# workspace; the post-commit login_confirm step connects the
|
|
@@ -1582,7 +1582,7 @@ class SetupFlow:
|
|
|
1582
1582
|
self._after_sandbox()
|
|
1583
1583
|
|
|
1584
1584
|
def _after_sandbox(self) -> None:
|
|
1585
|
-
if self.
|
|
1585
|
+
if self._hosted_alysis():
|
|
1586
1586
|
self._goto("login_confirm")
|
|
1587
1587
|
else:
|
|
1588
1588
|
self._goto("complete")
|
|
@@ -1698,10 +1698,22 @@ PROFILE_PRESETS: tuple[ProfilePreset, ...] = (
|
|
|
1698
1698
|
# The models the subscription offers. Live availability is discovered
|
|
1699
1699
|
# from the gateway's /v1/models at runtime; this static list is the
|
|
1700
1700
|
# offline fallback and the menu shown before a model is chosen.
|
|
1701
|
-
suggested_models=(
|
|
1701
|
+
suggested_models=(
|
|
1702
|
+
"deepseek-v4-flash",
|
|
1703
|
+
"deepseek-v4-pro",
|
|
1704
|
+
"deepseek-v4-flash-vision-exp",
|
|
1705
|
+
"deepseek-v4.1-flash-expires-on-0910",
|
|
1706
|
+
),
|
|
1702
1707
|
suggested_model_descriptions={
|
|
1703
1708
|
"deepseek-v4-flash": "default - fast high-volume coding (1M context, free daily allowance)",
|
|
1704
1709
|
"deepseek-v4-pro": "flagship - deeper reasoning (1M context, requires Alysis Code Pro)",
|
|
1710
|
+
"deepseek-v4-flash-vision-exp": (
|
|
1711
|
+
"vision preview - image understanding at the v4-flash rate (experimental)"
|
|
1712
|
+
),
|
|
1713
|
+
"deepseek-v4.1-flash-expires-on-0910": (
|
|
1714
|
+
"V4.1 Flash beta - new architecture, native multimodal, v4-flash rate; "
|
|
1715
|
+
"DeepSeek retires this id on 2026-09-10"
|
|
1716
|
+
),
|
|
1705
1717
|
},
|
|
1706
1718
|
validation_model="deepseek-v4-flash",
|
|
1707
1719
|
# Migrate ids from the retired Xiaomi MiMo trial to the Pro default so
|
|
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
|
{alysis_code-0.13.6 → alysis_code-0.13.6.2}/src/alysis_code/agent/mutation_classification.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|