alysis-code 0.14.0__tar.gz → 0.14.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.14.0 → alysis_code-0.14.2}/PKG-INFO +1 -1
- {alysis_code-0.14.0 → alysis_code-0.14.2}/docs/CHANGELOG.md +30 -2
- {alysis_code-0.14.0 → alysis_code-0.14.2}/pyproject.toml +1 -1
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/__init__.py +1 -1
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/chat/loop.py +44 -12
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/config_menu.py +2 -2
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/app.py +21 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/factory.py +8 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/openai_compat.py +12 -2
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/openai_responses.py +47 -5
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/protocols.py +24 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/model_registry.py +16 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/profile_presets.py +3 -1
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/reasoning_contracts.py +12 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/.gitignore +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/LICENSE +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/NOTICE +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/README.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/__main__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/_build_info.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/account_login.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/README.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/acceptance_contract.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/anytime_checkpoint.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/blast_radius.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/cache_keepalive.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/checkpoint_worker.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/completion_certificate.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/completion_gate.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/empty_response_stall.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/errors.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/llm_calls.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/mutation_classification.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/prompt_context.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/prompt_families.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/prompt_guidance.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/read_ledger.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/regression_baseline.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/reproduction_first.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/sensitive_output.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/session.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/steering.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/subagent_execution.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/subagent_workspace.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/task_evidence.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/task_state.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/tools_assembly.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/turn/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/turn/core.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/turn/events.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/turn/exploration.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/turn/interventions.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/turn/read_cache.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/turn/snapshot.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/turn/subagent_progress.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/turn_contract.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/turn_path.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/verification.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/verification_commands.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/verification_evidence.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent/verification_result.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent_loop.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent_runtimes/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent_runtimes/base.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent_runtimes/builtins.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent_runtimes/codex_cli.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent_runtimes/host.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent_runtimes/registry.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agent_runtimes/service.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agentbox_client.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/agentbox_integration.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/alysis_cloud.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/approval_scope.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/README.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/asset_read_core.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/budget_allocator.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/comprehender.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/index.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/ingestion.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/legacy_migration.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/local_tools.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/models.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/ocr.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-000.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-001.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-002.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-003.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-004.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-005.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-006.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-007.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-008.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-009.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-010.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-011.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-012.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-013.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-014.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-015.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-016.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-017.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-018.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-019.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/ascii/f-020.txt +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/index.html +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/owl/show-owl.sh +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/paths.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/plan_binding.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/planner_context.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/planner_tools.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/prompts.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/replanner_context.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/surface.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/untrusted_content.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/usage_logger.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/worker_mirror.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/worker_section.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/assets/worker_tools.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/atomic_io.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/auth_diagnostics.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/background_runner.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/branding.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/budget_policy.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/build_identity.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/builtin_hooks/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/builtin_hooks/notify_done_windows.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/bwrap_etc.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cancellation.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/capabilities.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/chatgpt_codex_static_provider.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/checkpoint_settings.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/assets_cli.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/assets_modal.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/chat/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/chat/commands.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/chat/forge_visibility.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/chat/mid_turn_policy.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/chat/rendering.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/chat/state.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/chat_resume.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/chat_slash_completer.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/_shared.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/auth.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/chat_resume_helpers.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/chat_state.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/chat_status.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/chat_terminal.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/chat_tui_panels.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/cli_common.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/cli_surface.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/config.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/conventions.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/execution_helpers.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/extensions.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/forge.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/forge_asset_view.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/forge_helpers.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/hooks.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/ide_bridge.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/mcp.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/profile.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/prompt_helpers.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/report.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/root.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/sandbox.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/server.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/sessions.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/skills.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/startup.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/tools.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/update.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/commands/welcome.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/forge.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/forge_recovery.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/setup_wizard.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/attachments.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/composer.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/config.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/config_flow.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/config_overlay.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/content.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/footer.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/forge_status.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/links.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/markdown.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/owl.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/plan_meta.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/selection_bindings.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/setup_app.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/setup_flow.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/state.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/subagent_identity.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/subagent_panel.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/surface.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/tips.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/transcript.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/update_prompt.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/cli_impl/tui/workspace_guard.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/clipboard.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/code_review.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/compaction/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/compaction/conversation_compactor.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/compaction/importance.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/compaction/settings.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/compaction/tool_output_offload.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/config.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/conflict_auto_resolver.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/consumer_verification.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/context/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/context/tool_schema_budgeter.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/crash_diagnostics.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/custom_tools/README.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/custom_tools/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/custom_tools/discovery.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/custom_tools/runtime.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/custom_tools/session.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/custom_tools/trust.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/diff_paths.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/direction_change.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/dispatch_timing.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/durable_service_manager.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/edit_discipline.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/error_text.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/execution_budget.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/execution_context.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/execution_deadline.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/execution_shared.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/extensions/README.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/extensions/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/extensions/activation.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/extensions/install.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/extensions/manifest.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/extensions/models.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/extensions/paths.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/extensions/registry.json +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/extensions/registry.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/extensions/state.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/extensions/workspace_trust.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/failed_task_evidence.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/failure_category.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/feedback_report.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/file_classification.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/forge.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/forge_completion.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/forge_events.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/frontmatter_utils.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/git_evidence.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/git_ops.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/git_safe.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/git_worktrees.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/hooks/README.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/hooks/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/hooks/audit.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/hooks/config.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/hooks/dispatcher.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/hooks/models.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/hooks/trust.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/host_actions.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/host_browser.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/activity_events.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/approvals.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/artifacts.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/browser_egress_proxy.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/cdp_websocket_transport.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/change_ledger.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/context_blocks.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/event_stream.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/forge_protocol.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/forge_request_ledger.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/health.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/managed_browser.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/management_protocol.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/mcp_oauth_coordinator.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/mcp_oauth_lifecycle.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/prompt_queue.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/protocol.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/resumable_swarm.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/session_search.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/stdio_bridge.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/structured_state.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/ide/swarm_protocol.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/integration_gate.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/interactive_input_guard.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/internal_artifacts.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/knowledge_base.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/knowledge_capture.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/knowledge_librarian.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/language_policy.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/litellm_static_provider.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/anthropic_messages.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/base.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/cache_capabilities.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/cache_control_blocks.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/cache_policy.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/gemini_generate_content.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/gemini_interactions.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/http_cancellation.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/metadata.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/provider_limits.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/request_plan.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/request_shape.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/streaming.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/temperature_compat.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/tool_call_markup.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/types.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm/usage_normalization.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/llm_error_display.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/logging_redaction.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/managed_host_deadline.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/README.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/client.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/config.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/errors.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/forge_scope.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/jsonrpc.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/manager.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/models.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/oauth.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/oauth_runtime.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/oauth_store.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/prompts.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/resources.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/roots.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/server_requests.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/token_store.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/transport_http.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/transport_stdio.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/mcp/untrusted_content.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/merge_conflict_reviewer.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/model_catalog/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/model_catalog/chatgpt_codex_subscription_snapshot.json +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.json +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.meta.json +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/model_metadata_policy.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/model_metadata_utils.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/model_router.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/permission_policy.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/personas.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/pipeline_facts.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/plan_assistant.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/plan_reconciliation.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/plan_repair.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/plan_validation.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/planning_constraints.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/policy.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/preview_server.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/private_artifact_io.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/process_reaping.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/profiles.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/prompt_guidance_catalog.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/provider_auth/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/provider_auth/base.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/provider_auth/openai_codex.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/provider_auth/registry.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/provider_auth/store.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/provider_diagnostics.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/provider_model_catalog.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/provider_telemetry.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/provider_url.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/remote_sync.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/replanning.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/repo_scan.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/request_estimation.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/review_gate.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/run_lock.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/run_outcome.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/run_provenance.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/run_state.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/runtime_artifacts.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/runtime_context_features.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/runtime_kind.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/safety/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/safety/mcp_sanitize.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/safety/safe_http.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/safety/subagent_report.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/sandbox_doctor.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/sandbox_runner.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/sandbox_settings.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/serialized_paths.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/server/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/server/app.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/server/auth.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/server/job_config.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/server/settings.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/server/store.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/server/worker_runner.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/service_persistence.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/session_artifacts.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/session_metrics.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/session_store.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/README.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/bundled/address-pr-comments/SKILL.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/bundled/code-review/SKILL.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/bundled/commit/SKILL.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/bundled/debug/SKILL.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/bundled/fix-ci/SKILL.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/bundled/release-notes/SKILL.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/bundled/security-review/SKILL.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/bundled/skill-creator/SKILL.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/conventions.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/discovery.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/eval_models.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/eval_runner.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/evals.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/install.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/loader.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/matching.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/models.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/paths.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/prompting.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/scaffold.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/state.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/transactions.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/skills/validation.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/step_budget.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/subagent_labels.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/subagents.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/surface/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/surface/base.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/surface/console.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/surface/events.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/surface/hidden_surface.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/surface/noop_surface.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/surface/rich_surface.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/surface/styles.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/surface/theme.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/surface/types.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/swarm_backend.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/swarm_orchestrator.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/swarm_scheduler.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/swarm_trace.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/swarm_worker.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/swarm_write_guard.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/task_dependencies.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/task_readiness.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/task_scope.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/terminal_manager.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/terminal_ownership.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/text_normalization.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/token_budget.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/README.md +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/__init__.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/artifacts.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/availability.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/capability_readiness.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/fs.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/git.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/history.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/http_timeout.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/image_generation.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/registry.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/repo_map.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/search.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/shell.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/symbols.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/test_discovery.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/web.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/web_search.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/web_search_dashscope.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/web_search_ddgs.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/web_search_provider_adapters.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/tools/web_search_tavily.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/transport_retry.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/updates.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/usage_tracker.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/verification_command_analysis.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/verification_contract.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/verification_failure_summary.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/verification_repair.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/verify_gate.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/web_research.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/web_search_adapters.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/web_search_policy.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/workspace_binding.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/workspace_binding_ui.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/workspace_context.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.2}/src/alysis_code/workspace_isolation.py +0 -0
- {alysis_code-0.14.0 → alysis_code-0.14.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.14.
|
|
3
|
+
Version: 0.14.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
|
|
@@ -6,7 +6,34 @@ Notable user-facing changes to Alysis Code are recorded here. This project follo
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## [0.14.2] - 2026-09-28
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Show only supported reasoning efforts for hosted Luna and clear incompatible
|
|
14
|
+
settings inherited from another model. Map saved or environment-provided
|
|
15
|
+
`minimal` and `ultra` settings to `low` and `max`, preventing invalid-effort
|
|
16
|
+
errors during the free-credit campaign.
|
|
17
|
+
- Preserve the hosted gateway's capacity retry guidance and account request-limit
|
|
18
|
+
messages so users can distinguish temporary capacity from exhausted credits.
|
|
19
|
+
- Cancel working-tip link clicks when a fast mouse drag arrives before the next
|
|
20
|
+
screen repaint.
|
|
21
|
+
|
|
22
|
+
## [0.14.1] - 2026-09-25
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- Add GPT-6 Luna to the Alysis Code account model picker, with hosted Responses
|
|
27
|
+
routing, configurable reasoning, and stateless function-tool continuation.
|
|
28
|
+
Luna uses the account's shared credit allowance alongside the Flash models.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- Rebuild the correct chat and compactor transports when switching between hosted
|
|
33
|
+
Luna and Flash models during a conversation, while preserving the session on a
|
|
34
|
+
failed switch.
|
|
35
|
+
- Keep hosted web search as a function tool and show the gateway's capacity,
|
|
36
|
+
request, and credit-limit reasons instead of a generic rate-limit message.
|
|
10
37
|
|
|
11
38
|
## [0.14.0] - 2026-09-24
|
|
12
39
|
|
|
@@ -342,7 +369,8 @@ Public launch and repository-layout refresh.
|
|
|
342
369
|
Release notes for versions before 0.9.8 remain available in the
|
|
343
370
|
[GitHub Releases archive](https://github.com/AlysisAi/alysis-code/releases).
|
|
344
371
|
|
|
345
|
-
[Unreleased]: https://github.com/AlysisAi/alysis-code/compare/v0.14.
|
|
372
|
+
[Unreleased]: https://github.com/AlysisAi/alysis-code/compare/v0.14.1...HEAD
|
|
373
|
+
[0.14.1]: https://github.com/AlysisAi/alysis-code/compare/v0.14.0...v0.14.1
|
|
346
374
|
[0.14.0]: https://github.com/AlysisAi/alysis-code/compare/v0.13.8...v0.14.0
|
|
347
375
|
[0.13.8]: https://github.com/AlysisAi/alysis-code/compare/v0.13.7...v0.13.8
|
|
348
376
|
[0.13.7]: https://github.com/AlysisAi/alysis-code/compare/v0.13.6.2...v0.13.7
|
|
@@ -947,6 +947,8 @@ def _reset_route_local_client_capabilities(client: Any, *, route_changed: bool)
|
|
|
947
947
|
|
|
948
948
|
_RELOAD_SESSION_FIELDS = (
|
|
949
949
|
"cfg",
|
|
950
|
+
"client",
|
|
951
|
+
"conversation_compactor",
|
|
950
952
|
"routing_mode",
|
|
951
953
|
"max_steps",
|
|
952
954
|
"api_key",
|
|
@@ -1093,7 +1095,7 @@ def _apply_config_menu_changes_to_session_mutating(*, session: Any, cfg: AppConf
|
|
|
1093
1095
|
)
|
|
1094
1096
|
from ...llm.cache_capabilities import resolve_effective_cache_capability
|
|
1095
1097
|
from ...llm.cache_policy import build_prompt_cache_namespace, resolve_prompt_cache_policy
|
|
1096
|
-
from ...llm.factory import _session_routing_headers
|
|
1098
|
+
from ...llm.factory import _session_routing_headers, make_llm_client, resolve_model_protocol
|
|
1097
1099
|
from ...llm.metadata import (
|
|
1098
1100
|
build_provider_route_identity,
|
|
1099
1101
|
credential_scope_fingerprint,
|
|
@@ -1125,7 +1127,7 @@ def _apply_config_menu_changes_to_session_mutating(*, session: Any, cfg: AppConf
|
|
|
1125
1127
|
)
|
|
1126
1128
|
active_profile = get_active_profile(session.cfg)
|
|
1127
1129
|
effective_base_url = resolve_effective_base_url(cfg=session.cfg, profile=active_profile)
|
|
1128
|
-
|
|
1130
|
+
profile_protocol = str(active_profile.protocol or OPENAI_COMPAT_PROTOCOL).strip()
|
|
1129
1131
|
resolved_key = resolve_api_key(session.cfg)
|
|
1130
1132
|
session.api_key = str(resolved_key.key or "")
|
|
1131
1133
|
session.api_key_source = (
|
|
@@ -1166,8 +1168,41 @@ def _apply_config_menu_changes_to_session_mutating(*, session: Any, cfg: AppConf
|
|
|
1166
1168
|
model: str,
|
|
1167
1169
|
role: str,
|
|
1168
1170
|
temperature: float | None = None,
|
|
1169
|
-
) ->
|
|
1171
|
+
) -> Any:
|
|
1170
1172
|
existing_route_identity = getattr(client, "route_identity", None)
|
|
1173
|
+
preset = find_preset_for_profile(active_profile)
|
|
1174
|
+
provider_key = str(preset.provider_key or "").strip() if preset is not None else ""
|
|
1175
|
+
if not provider_key:
|
|
1176
|
+
provider_key = resolve_model_provider_key(
|
|
1177
|
+
cfg=session.cfg,
|
|
1178
|
+
model_name=model,
|
|
1179
|
+
base_url=effective_base_url,
|
|
1180
|
+
profile_name=active_profile.name,
|
|
1181
|
+
)
|
|
1182
|
+
protocol = resolve_model_protocol(
|
|
1183
|
+
provider_key=provider_key, model=model, protocol=profile_protocol
|
|
1184
|
+
)
|
|
1185
|
+
existing_protocol = str(getattr(existing_route_identity, "protocol", "") or "")
|
|
1186
|
+
if existing_protocol and existing_protocol != protocol:
|
|
1187
|
+
return make_llm_client(
|
|
1188
|
+
cfg=session.cfg,
|
|
1189
|
+
api_key=session.api_key,
|
|
1190
|
+
model=model,
|
|
1191
|
+
timeout_s=timeout_s,
|
|
1192
|
+
temperature=temperature if temperature is not None else client.temperature,
|
|
1193
|
+
prompt_cache_key=prompt_cache_key,
|
|
1194
|
+
prompt_cache_retention=prompt_cache_retention,
|
|
1195
|
+
prompt_cache_namespace=build_prompt_cache_namespace(
|
|
1196
|
+
workspace_root=getattr(session, "root", None),
|
|
1197
|
+
role=role,
|
|
1198
|
+
profile_name=active_profile.name,
|
|
1199
|
+
),
|
|
1200
|
+
enable_thinking=enable_thinking,
|
|
1201
|
+
reasoning_effort=reasoning_effort,
|
|
1202
|
+
transport=getattr(client, "_transport", None),
|
|
1203
|
+
profile=active_profile,
|
|
1204
|
+
session_id=provider_session_id,
|
|
1205
|
+
)
|
|
1171
1206
|
client.base_url = effective_base_url
|
|
1172
1207
|
if hasattr(client, "provider_auth"):
|
|
1173
1208
|
client.provider_auth = provider_auth
|
|
@@ -1178,17 +1213,10 @@ def _apply_config_menu_changes_to_session_mutating(*, session: Any, cfg: AppConf
|
|
|
1178
1213
|
client.timeout_s = timeout_s
|
|
1179
1214
|
if temperature is not None:
|
|
1180
1215
|
client.temperature = temperature
|
|
1181
|
-
provider_key = resolve_model_provider_key(
|
|
1182
|
-
cfg=session.cfg,
|
|
1183
|
-
model_name=model,
|
|
1184
|
-
base_url=effective_base_url,
|
|
1185
|
-
profile_name=active_profile.name,
|
|
1186
|
-
)
|
|
1187
1216
|
capabilities = get_provider_protocol_capabilities(
|
|
1188
1217
|
provider_key=provider_key,
|
|
1189
1218
|
protocol=protocol,
|
|
1190
1219
|
)
|
|
1191
|
-
preset = find_preset_for_profile(active_profile)
|
|
1192
1220
|
cache_capability = resolve_effective_cache_capability(
|
|
1193
1221
|
provider_key=provider_key,
|
|
1194
1222
|
protocol=protocol,
|
|
@@ -1331,10 +1359,11 @@ def _apply_config_menu_changes_to_session_mutating(*, session: Any, cfg: AppConf
|
|
|
1331
1359
|
client.provider_concurrency_caps = dict(session.cfg.provider_concurrency_caps)
|
|
1332
1360
|
if hasattr(client, "provider_retry_settings"):
|
|
1333
1361
|
client.provider_retry_settings = provider_retry_settings
|
|
1362
|
+
return client
|
|
1334
1363
|
|
|
1335
1364
|
client = getattr(session, "client", None)
|
|
1336
1365
|
if client is not None:
|
|
1337
|
-
_apply_client_config(
|
|
1366
|
+
session.client = _apply_client_config(
|
|
1338
1367
|
client,
|
|
1339
1368
|
model=str(session.cfg.model or ""),
|
|
1340
1369
|
role=ROLE_CODING,
|
|
@@ -1353,12 +1382,15 @@ def _apply_config_menu_changes_to_session_mutating(*, session: Any, cfg: AppConf
|
|
|
1353
1382
|
)
|
|
1354
1383
|
except ConfigError:
|
|
1355
1384
|
compactor_model = str(session.cfg.model or "")
|
|
1356
|
-
_apply_client_config(
|
|
1385
|
+
refreshed_compactor_client = _apply_client_config(
|
|
1357
1386
|
compactor_client,
|
|
1358
1387
|
model=compactor_model,
|
|
1359
1388
|
role=ROLE_COMPACTOR,
|
|
1360
1389
|
temperature=resolve_role_temperature(session.cfg, role=ROLE_COMPACTOR),
|
|
1361
1390
|
)
|
|
1391
|
+
if refreshed_compactor_client is not compactor_client:
|
|
1392
|
+
session.conversation_compactor = copy.copy(compactor)
|
|
1393
|
+
session.conversation_compactor.compactor_client = refreshed_compactor_client
|
|
1362
1394
|
|
|
1363
1395
|
_rebuild_session_tools_for_mode(
|
|
1364
1396
|
session=session,
|
|
@@ -492,7 +492,7 @@ class ConfigMenuState:
|
|
|
492
492
|
"""Drop a stale effort inherited from another provider/model surface."""
|
|
493
493
|
|
|
494
494
|
preset = _active_preset(self)
|
|
495
|
-
if preset is None or preset.key not in {"nvidia", "zai-coding-plan"}:
|
|
495
|
+
if preset is None or preset.key not in {"alysis", "nvidia", "zai-coding-plan"}:
|
|
496
496
|
return
|
|
497
497
|
allowed = _thinking_labels_for_state(
|
|
498
498
|
self,
|
|
@@ -3674,7 +3674,7 @@ def _thinking_labels_for_state(
|
|
|
3674
3674
|
if preset_key == "nvidia" and contract is UNKNOWN_CONTRACT:
|
|
3675
3675
|
return ("auto",)
|
|
3676
3676
|
current = _normalize_thinking_label(state.thinking_label)
|
|
3677
|
-
if preset_key in {"nvidia", "zai-coding-plan"}:
|
|
3677
|
+
if preset_key in {"alysis", "nvidia", "zai-coding-plan"}:
|
|
3678
3678
|
# A global effort may have been saved for the previously active
|
|
3679
3679
|
# provider. Do not preserve an invalid value merely because it is
|
|
3680
3680
|
# current; these controls are exact per hosted model and surface.
|
|
@@ -59,6 +59,7 @@ from prompt_toolkit.layout.controls import FormattedTextControl, UIContent, UICo
|
|
|
59
59
|
from prompt_toolkit.layout.dimension import D
|
|
60
60
|
from prompt_toolkit.layout.margins import ScrollbarMargin
|
|
61
61
|
from prompt_toolkit.layout.menus import CompletionsMenu
|
|
62
|
+
from prompt_toolkit.layout.mouse_handlers import MouseHandlers
|
|
62
63
|
from prompt_toolkit.layout.processors import Processor, Transformation
|
|
63
64
|
from prompt_toolkit.layout.utils import explode_text_fragments
|
|
64
65
|
from prompt_toolkit.mouse_events import MouseButton, MouseEvent, MouseEventType
|
|
@@ -2646,6 +2647,7 @@ def run_tui(
|
|
|
2646
2647
|
"step": None,
|
|
2647
2648
|
"generation": 0,
|
|
2648
2649
|
"worker_generation": None,
|
|
2650
|
+
"early_mouse_handlers": None,
|
|
2649
2651
|
}
|
|
2650
2652
|
|
|
2651
2653
|
def _safe_invalidate() -> None:
|
|
@@ -2660,11 +2662,30 @@ def run_tui(
|
|
|
2660
2662
|
tip_link_press = None
|
|
2661
2663
|
drag_capture["generation"] += 1
|
|
2662
2664
|
drag_capture.update({"target": target, "direction": 0, "step": step})
|
|
2665
|
+
if target == "tip_link":
|
|
2666
|
+
# A whole press/drag/release can arrive in one input batch, before
|
|
2667
|
+
# the capture float repaints. Capture those events immediately too.
|
|
2668
|
+
application = get_app()
|
|
2669
|
+
renderer = application.renderer
|
|
2670
|
+
previous = renderer.mouse_handlers
|
|
2671
|
+
captured = MouseHandlers()
|
|
2672
|
+
size = application.output.get_size()
|
|
2673
|
+
captured.set_mouse_handler_for_range(
|
|
2674
|
+
0, size.columns, 0, size.rows, _tip_link_mouse_event
|
|
2675
|
+
)
|
|
2676
|
+
renderer.mouse_handlers = captured
|
|
2677
|
+
drag_capture["early_mouse_handlers"] = (renderer, previous, captured)
|
|
2663
2678
|
_safe_invalidate()
|
|
2664
2679
|
|
|
2665
2680
|
def _stop_drag_capture() -> None:
|
|
2666
2681
|
nonlocal tip_link_press
|
|
2667
2682
|
tip_link_press = None
|
|
2683
|
+
early_handlers = drag_capture.pop("early_mouse_handlers", None)
|
|
2684
|
+
if early_handlers is not None:
|
|
2685
|
+
renderer, previous, captured = early_handlers
|
|
2686
|
+
# A repaint installs its own capture map; never restore over it.
|
|
2687
|
+
if renderer.mouse_handlers is captured:
|
|
2688
|
+
renderer.mouse_handlers = previous
|
|
2668
2689
|
if drag_capture["target"] is None:
|
|
2669
2690
|
return
|
|
2670
2691
|
drag_capture["generation"] += 1
|
|
@@ -126,6 +126,7 @@ def make_llm_client(
|
|
|
126
126
|
base_url=base_url,
|
|
127
127
|
profile_name=resolved_profile.name,
|
|
128
128
|
)
|
|
129
|
+
protocol = resolve_model_protocol(provider_key=provider_key, model=model, protocol=protocol)
|
|
129
130
|
capabilities = get_provider_protocol_capabilities(
|
|
130
131
|
provider_key=provider_key,
|
|
131
132
|
protocol=protocol,
|
|
@@ -376,6 +377,13 @@ def make_llm_client(
|
|
|
376
377
|
)
|
|
377
378
|
|
|
378
379
|
|
|
380
|
+
def resolve_model_protocol(*, provider_key: str | None, model: str, protocol: str) -> str:
|
|
381
|
+
"""Resolve model-specific transports for initial connections and live switches."""
|
|
382
|
+
if provider_key == "alysis" and model == "gpt-6-luna":
|
|
383
|
+
return OPENAI_RESPONSES_PROTOCOL
|
|
384
|
+
return protocol
|
|
385
|
+
|
|
386
|
+
|
|
379
387
|
def _attach_reasoning_trace_capability(client: ChatClient, capability: object) -> ChatClient:
|
|
380
388
|
"""Expose the resolved trace dialect without widening every client constructor."""
|
|
381
389
|
|
|
@@ -1329,8 +1329,9 @@ _ALYSIS_PROXY_ERROR_MESSAGES: dict[str, str] = {
|
|
|
1329
1329
|
"You're sending requests too quickly. Please wait a moment and try again."
|
|
1330
1330
|
),
|
|
1331
1331
|
"hosted_capacity_exceeded": (
|
|
1332
|
-
"
|
|
1333
|
-
"
|
|
1332
|
+
"The Alysis hosted model is unavailable or at capacity. "
|
|
1333
|
+
"If this persists, its server route needs checking. "
|
|
1334
|
+
"No generation was started and no credits were charged."
|
|
1334
1335
|
),
|
|
1335
1336
|
"hosted_routing_unavailable": (
|
|
1336
1337
|
"Hosted model routing is temporarily unavailable. Please retry shortly. "
|
|
@@ -1361,6 +1362,12 @@ def alysis_trial_error_message(err: LLMError) -> str | None:
|
|
|
1361
1362
|
# and reservation budget in its message, while retaining the OpenAI error code.
|
|
1362
1363
|
# Preserve that explanation instead of mislabeling every limit as excess RPM.
|
|
1363
1364
|
message = error.get("message")
|
|
1365
|
+
if (
|
|
1366
|
+
code == "hosted_capacity_exceeded"
|
|
1367
|
+
and isinstance(message, str)
|
|
1368
|
+
and message.startswith("Hosted model capacity is busy. Retry in ")
|
|
1369
|
+
):
|
|
1370
|
+
return message[:2048]
|
|
1364
1371
|
if (
|
|
1365
1372
|
code == "rate_limit_exceeded"
|
|
1366
1373
|
and isinstance(message, str)
|
|
@@ -1369,7 +1376,10 @@ def alysis_trial_error_message(err: LLMError) -> str | None:
|
|
|
1369
1376
|
"5-hour fair-use limit reached (",
|
|
1370
1377
|
"Weekly fair-use limit reached (",
|
|
1371
1378
|
"Four hosted requests are already running for your account.",
|
|
1379
|
+
"Your account has reached its hosted request limit.",
|
|
1380
|
+
"Your account has reached the 20 requests per minute limit.",
|
|
1372
1381
|
"Available credits cannot cover this request while other usage or reservations apply.",
|
|
1382
|
+
"Your available credit allowance is exhausted.",
|
|
1373
1383
|
)
|
|
1374
1384
|
)
|
|
1375
1385
|
):
|
|
@@ -35,6 +35,7 @@ from .metadata import (
|
|
|
35
35
|
merge_canonical_headers,
|
|
36
36
|
stamp_response_for_route,
|
|
37
37
|
)
|
|
38
|
+
from .protocols import OPENAI_RESPONSES_PROTOCOL, get_provider_protocol_capabilities
|
|
38
39
|
from .provider_limits import (
|
|
39
40
|
DEFAULT_PROVIDER_CONCURRENCY_CAPS,
|
|
40
41
|
ProviderRetrySettings,
|
|
@@ -867,6 +868,7 @@ def _responses_tools(
|
|
|
867
868
|
*,
|
|
868
869
|
mode: str,
|
|
869
870
|
adapter: str,
|
|
871
|
+
provider_key: str | None = None,
|
|
870
872
|
) -> _ResponsesToolMapping:
|
|
871
873
|
normalized_mode = str(mode or "off").strip().lower()
|
|
872
874
|
normalized_adapter = (
|
|
@@ -874,8 +876,26 @@ def _responses_tools(
|
|
|
874
876
|
)
|
|
875
877
|
raw_tools = [tool for tool in tools or [] if isinstance(tool, dict)]
|
|
876
878
|
alysis_web_search_present = any(_is_alysis_web_search_function(tool) for tool in raw_tools)
|
|
879
|
+
capabilities = get_provider_protocol_capabilities(
|
|
880
|
+
provider_key=provider_key or "", protocol=OPENAI_RESPONSES_PROTOCOL
|
|
881
|
+
)
|
|
882
|
+
builtin_web_search_allowed = (
|
|
883
|
+
capabilities is None or capabilities.supports_provider_hosted_web_search_adapter
|
|
884
|
+
)
|
|
885
|
+
hosted_web_search_present = any(
|
|
886
|
+
_is_responses_hosted_web_search_tool(tool) for tool in raw_tools
|
|
887
|
+
)
|
|
888
|
+
if not builtin_web_search_allowed and (
|
|
889
|
+
(normalized_mode == "native" and alysis_web_search_present)
|
|
890
|
+
or (normalized_mode in {"auto", "native"} and hosted_web_search_present)
|
|
891
|
+
):
|
|
892
|
+
raise LLMError(
|
|
893
|
+
f"Provider {provider_key!r} does not support built-in web search. "
|
|
894
|
+
"Use web_search_mode='auto' or 'external' with the Alysis web_search function."
|
|
895
|
+
)
|
|
877
896
|
use_openai_builtin_web_search = (
|
|
878
|
-
|
|
897
|
+
builtin_web_search_allowed
|
|
898
|
+
and alysis_web_search_present
|
|
879
899
|
and _openai_builtin_web_search_allowed(
|
|
880
900
|
mode=normalized_mode,
|
|
881
901
|
adapter=normalized_adapter,
|
|
@@ -1004,9 +1024,15 @@ def _responses_reasoning(
|
|
|
1004
1024
|
enable_thinking: bool | None,
|
|
1005
1025
|
reasoning_effort: str | None,
|
|
1006
1026
|
request_summary: bool = False,
|
|
1027
|
+
provider_key: str | None = None,
|
|
1028
|
+
model: str | None = None,
|
|
1007
1029
|
) -> dict[str, Any] | None:
|
|
1008
1030
|
reasoning: dict[str, Any] = {}
|
|
1009
1031
|
effort = str(reasoning_effort or "").strip().lower()
|
|
1032
|
+
if provider_key == "alysis" and model == "gpt-6-luna":
|
|
1033
|
+
# Older hosted pickers exposed the generic Responses efforts. Preserve
|
|
1034
|
+
# saved configs and environment overrides at Luna's supported bounds.
|
|
1035
|
+
effort = {"minimal": "low", "ultra": "max"}.get(effort, effort)
|
|
1010
1036
|
if effort:
|
|
1011
1037
|
if effort not in _RESPONSES_REASONING_EFFORTS:
|
|
1012
1038
|
raise LLMError(f"OpenAI Responses reasoning_effort is not supported: {effort}")
|
|
@@ -1916,12 +1942,16 @@ class OpenAIResponsesClient:
|
|
|
1916
1942
|
)
|
|
1917
1943
|
error_message = _extract_error_message(data)
|
|
1918
1944
|
if error_message:
|
|
1919
|
-
|
|
1945
|
+
err = LLMError(
|
|
1920
1946
|
sanitize_error_text_for_output(f"LLM error {response.status_code}: {error_message}")
|
|
1921
1947
|
)
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1948
|
+
else:
|
|
1949
|
+
err = LLMError(
|
|
1950
|
+
sanitize_error_text_for_output(f"LLM error {response.status_code}: {data!r}")
|
|
1951
|
+
)
|
|
1952
|
+
err.provider_status_code = response.status_code
|
|
1953
|
+
err.provider_error_body = sanitize_error_text_for_output(json.dumps(data))
|
|
1954
|
+
return err
|
|
1925
1955
|
|
|
1926
1956
|
def count_input_tokens(
|
|
1927
1957
|
self,
|
|
@@ -1940,6 +1970,7 @@ class OpenAIResponsesClient:
|
|
|
1940
1970
|
tools,
|
|
1941
1971
|
mode=self.web_search_mode,
|
|
1942
1972
|
adapter=self.web_search_adapter,
|
|
1973
|
+
provider_key=self.provider_key,
|
|
1943
1974
|
)
|
|
1944
1975
|
payload: dict[str, Any] = {
|
|
1945
1976
|
"model": self.model,
|
|
@@ -2080,6 +2111,7 @@ class OpenAIResponsesClient:
|
|
|
2080
2111
|
tools,
|
|
2081
2112
|
mode=self.web_search_mode,
|
|
2082
2113
|
adapter=self.web_search_adapter,
|
|
2114
|
+
provider_key=self.provider_key,
|
|
2083
2115
|
)
|
|
2084
2116
|
mapped_tools = tool_mapping.tools
|
|
2085
2117
|
temp_omit_key = _responses_temperature_omit_key(self.base_url, self.model)
|
|
@@ -2089,6 +2121,8 @@ class OpenAIResponsesClient:
|
|
|
2089
2121
|
enable_thinking=self.enable_thinking,
|
|
2090
2122
|
reasoning_effort=self.reasoning_effort,
|
|
2091
2123
|
request_summary=self._should_request_reasoning_summary(),
|
|
2124
|
+
provider_key=self.provider_key,
|
|
2125
|
+
model=self.model,
|
|
2092
2126
|
)
|
|
2093
2127
|
documented_temperature_reason = documented_temperature_omit_reason(
|
|
2094
2128
|
self.model,
|
|
@@ -2106,6 +2140,10 @@ class OpenAIResponsesClient:
|
|
|
2106
2140
|
supports_previous_response_id = self.provider_auth is None or bool(
|
|
2107
2141
|
getattr(self.provider_auth, "supports_previous_response_id", True)
|
|
2108
2142
|
)
|
|
2143
|
+
if self.provider_key == "alysis":
|
|
2144
|
+
# Hosted credits meter the complete request. Shared upstream storage
|
|
2145
|
+
# must never be addressable by another Alysis account.
|
|
2146
|
+
supports_previous_response_id = False
|
|
2109
2147
|
if continuation is not None and supports_previous_response_id:
|
|
2110
2148
|
# With previous_response_id the API appends the sent input items to the
|
|
2111
2149
|
# stored thread; system/developer messages from turn 1 are already
|
|
@@ -2175,6 +2213,10 @@ class OpenAIResponsesClient:
|
|
|
2175
2213
|
payload["stream"] = True
|
|
2176
2214
|
if self.provider_auth is not None:
|
|
2177
2215
|
payload = self.provider_auth.adapt_responses_payload(payload)
|
|
2216
|
+
if self.provider_key == "alysis":
|
|
2217
|
+
payload["store"] = False
|
|
2218
|
+
payload["include"] = ["reasoning.encrypted_content"]
|
|
2219
|
+
payload.pop("temperature", None)
|
|
2178
2220
|
if self._reasoning_summary_support_by_model.get(reasoning_summary_support_key) is False:
|
|
2179
2221
|
_without_responses_reasoning_summary(payload)
|
|
2180
2222
|
return payload
|
|
@@ -383,6 +383,30 @@ PROVIDER_PROTOCOL_CAPABILITIES: tuple[ProviderProtocolCapabilities, ...] = (
|
|
|
383
383
|
reports_cache_write_tokens=True,
|
|
384
384
|
quirks=("Native OpenAI Responses chat supports buffered and SSE streaming responses.",),
|
|
385
385
|
),
|
|
386
|
+
ProviderProtocolCapabilities(
|
|
387
|
+
provider_key="alysis",
|
|
388
|
+
protocol=OPENAI_RESPONSES_PROTOCOL,
|
|
389
|
+
reasoning_trace=ReasoningTraceCapability(
|
|
390
|
+
adapter="openai_responses_summary",
|
|
391
|
+
output_kind=ReasoningOutputKind.SUMMARY,
|
|
392
|
+
supports_streaming=True,
|
|
393
|
+
supports_buffered=True,
|
|
394
|
+
requestable=True,
|
|
395
|
+
continuation_state="opaque",
|
|
396
|
+
),
|
|
397
|
+
usage_contract=UsageContract(
|
|
398
|
+
response_usage_confidence=UsageConfidence.AUTHORITATIVE,
|
|
399
|
+
input_token_count_strategy="none",
|
|
400
|
+
),
|
|
401
|
+
supports_streaming=True,
|
|
402
|
+
supports_tool_calling=True,
|
|
403
|
+
supports_structured_outputs=True,
|
|
404
|
+
supports_provider_hosted_web_search_adapter=False,
|
|
405
|
+
default_web_search_adapter="none",
|
|
406
|
+
reports_cache_read_tokens=True,
|
|
407
|
+
reports_cache_write_tokens=True,
|
|
408
|
+
quirks=("Hosted Luna supports stateless text and function tools with shared credits.",),
|
|
409
|
+
),
|
|
386
410
|
ProviderProtocolCapabilities(
|
|
387
411
|
provider_key="anthropic",
|
|
388
412
|
protocol=OPENAI_COMPAT_PROTOCOL,
|
|
@@ -1577,6 +1577,22 @@ _OFFICIAL_PROVIDER_MODEL_METADATA["alysis"]["glm-5.3-flash"] = {
|
|
|
1577
1577
|
"output_cost_per_token": 0.0000005,
|
|
1578
1578
|
}
|
|
1579
1579
|
|
|
1580
|
+
_PROVIDER_CANONICAL_MODEL_IDS["alysis"]["gpt-6-luna"] = "gpt-6-luna"
|
|
1581
|
+
_OFFICIAL_PROVIDER_MODEL_SOURCES["alysis"]["gpt-6-luna"] = (
|
|
1582
|
+
"https://developers.openai.com/api/docs/models/gpt-6-luna",
|
|
1583
|
+
"https://developers.openai.com/api/docs/pricing",
|
|
1584
|
+
)
|
|
1585
|
+
_OFFICIAL_PROVIDER_MODEL_METADATA["alysis"]["gpt-6-luna"] = {
|
|
1586
|
+
"context_window_tokens": 1_050_000,
|
|
1587
|
+
"max_output_tokens": 128_000,
|
|
1588
|
+
"supports_vision": False,
|
|
1589
|
+
"supports_reasoning": True,
|
|
1590
|
+
"input_cost_per_token": 0.0000001,
|
|
1591
|
+
"cache_read_input_cost_per_token": 0.00000001,
|
|
1592
|
+
"cache_creation_input_cost_per_token": 0.000000125,
|
|
1593
|
+
"output_cost_per_token": 0.0000005,
|
|
1594
|
+
}
|
|
1595
|
+
|
|
1580
1596
|
_BUILT_IN_MODEL_METADATA: dict[str, dict[str, Any]] = {
|
|
1581
1597
|
"deepseek-chat": {
|
|
1582
1598
|
"context_window_tokens": 1_000_000,
|
|
@@ -1767,8 +1767,10 @@ PROFILE_PRESETS: tuple[ProfilePreset, ...] = (
|
|
|
1767
1767
|
model_choices=(
|
|
1768
1768
|
ReviewedModel("deepseek-flash", "deepseek-expanded"),
|
|
1769
1769
|
ReviewedModel("glm-5.3-flash", "glm-normal"),
|
|
1770
|
+
ReviewedModel("gpt-6-luna", "gpt-expanded"),
|
|
1770
1771
|
),
|
|
1771
1772
|
suggested_model_descriptions={
|
|
1773
|
+
"gpt-6-luna": "GPT-6 Luna - efficient coding and reasoning, included with free credits",
|
|
1772
1774
|
"deepseek-flash": (
|
|
1773
1775
|
"DeepSeek V4.1 Flash - vision and reasoning, 1M context, included with free credits"
|
|
1774
1776
|
),
|
|
@@ -1785,7 +1787,7 @@ PROFILE_PRESETS: tuple[ProfilePreset, ...] = (
|
|
|
1785
1787
|
"deepseek-v4.1-flash-expires-on-0910": "deepseek-flash",
|
|
1786
1788
|
},
|
|
1787
1789
|
setup_warning="Run `alysis login` to connect your Alysis account and use free credits.",
|
|
1788
|
-
notes="DeepSeek V4.1 Flash
|
|
1790
|
+
notes="DeepSeek V4.1 Flash, GLM 5.3 Flash, and GPT-6 Luna with free credits. Authenticate with `alysis login`.",
|
|
1789
1791
|
),
|
|
1790
1792
|
ProfilePreset(
|
|
1791
1793
|
key="ollama",
|
|
@@ -88,6 +88,7 @@ def reasoning_labels_allowed_by_contract(
|
|
|
88
88
|
return list(labels)
|
|
89
89
|
effort_wires = {
|
|
90
90
|
WIRE_REASONING_EFFORT,
|
|
91
|
+
WIRE_REASONING_OBJECT,
|
|
91
92
|
WIRE_THINKING_LEVEL,
|
|
92
93
|
WIRE_THINKING_ADAPTIVE,
|
|
93
94
|
}
|
|
@@ -355,6 +356,17 @@ _CONTRACTS: dict[str, tuple[tuple[str, ReasoningContract], ...]] = {
|
|
|
355
356
|
),
|
|
356
357
|
# Hosted models retain their upstream reasoning and replay contracts.
|
|
357
358
|
"alysis": (
|
|
359
|
+
(
|
|
360
|
+
"gpt-6-luna",
|
|
361
|
+
_C(
|
|
362
|
+
mode=OPTIONAL,
|
|
363
|
+
wire=WIRE_REASONING_OBJECT,
|
|
364
|
+
values=("none", "low", "medium", "high", "xhigh", "max"),
|
|
365
|
+
default="medium",
|
|
366
|
+
off=OFF_EXPLICIT,
|
|
367
|
+
notes="hosted Responses with full stateless reasoning and function-tool replay",
|
|
368
|
+
),
|
|
369
|
+
),
|
|
358
370
|
(
|
|
359
371
|
"deepseek-",
|
|
360
372
|
_C(
|
|
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
|