alysis-code 0.13.3__tar.gz → 0.13.5__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.3 → alysis_code-0.13.5}/PKG-INFO +1 -1
- {alysis_code-0.13.3 → alysis_code-0.13.5}/docs/CHANGELOG.md +51 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/pyproject.toml +1 -1
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/__init__.py +1 -1
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/acceptance_contract.py +30 -2
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/prompt_context.py +7 -2
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/reproduction_first.py +3 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/session.py +53 -2
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/subagent_execution.py +7 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/tools_assembly.py +2 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/turn/core.py +513 -10
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/verification.py +47 -41
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cancellation.py +12 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/chat/commands.py +48 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/chat/loop.py +87 -11
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/chat_slash_completer.py +24 -6
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/skills.py +10 -4
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/welcome.py +1 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/config_flow.py +82 -2
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/content.py +21 -5
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/config.py +12 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/execution_budget.py +2 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/management_protocol.py +5 -1
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/factory.py +2 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/gemini_generate_content.py +234 -2
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/openai_compat.py +201 -145
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/openai_responses.py +122 -16
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/provider_limits.py +6 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/streaming.py +67 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/model_registry.py +888 -73
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/profile_presets.py +442 -234
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/reasoning_contracts.py +162 -20
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/README.md +5 -2
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/__init__.py +31 -1
- alysis_code-0.13.5/src/alysis_code/skills/bundled/address-pr-comments/SKILL.md +19 -0
- alysis_code-0.13.5/src/alysis_code/skills/bundled/code-review/SKILL.md +18 -0
- alysis_code-0.13.5/src/alysis_code/skills/bundled/commit/SKILL.md +19 -0
- alysis_code-0.13.5/src/alysis_code/skills/bundled/debug/SKILL.md +18 -0
- alysis_code-0.13.5/src/alysis_code/skills/bundled/fix-ci/SKILL.md +20 -0
- alysis_code-0.13.5/src/alysis_code/skills/bundled/release-notes/SKILL.md +19 -0
- alysis_code-0.13.5/src/alysis_code/skills/bundled/security-review/SKILL.md +18 -0
- alysis_code-0.13.5/src/alysis_code/skills/bundled/skill-creator/SKILL.md +19 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/conventions.py +9 -2
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/discovery.py +38 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/eval_models.py +71 -1
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/eval_runner.py +257 -7
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/evals.py +573 -18
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/models.py +2 -2
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/paths.py +4 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/prompting.py +19 -3
- alysis_code-0.13.5/src/alysis_code/skills/selection.py +226 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/state.py +8 -2
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/registry.py +3 -2
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/web_search.py +3 -2
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/web_search_provider_adapters.py +83 -17
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/verification_command_analysis.py +107 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/.gitignore +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/LICENSE +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/NOTICE +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/README.md +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/__main__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/_build_info.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/account_login.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/README.md +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/blast_radius.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/cache_keepalive.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/completion_certificate.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/completion_gate.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/empty_response_stall.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/errors.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/llm_calls.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/mutation_classification.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/read_ledger.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/regression_baseline.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/sensitive_output.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/steering.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/subagent_workspace.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/turn/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/turn/events.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/turn/exploration.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/turn/interventions.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/turn/read_cache.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/turn/snapshot.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/turn_contract.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/turn_path.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/verification_commands.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent/verification_evidence.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent_loop.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent_runtimes/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent_runtimes/base.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent_runtimes/builtins.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent_runtimes/codex_cli.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent_runtimes/host.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent_runtimes/registry.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agent_runtimes/service.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agentbox_client.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/agentbox_integration.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/alysis_cloud.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/approval_scope.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/README.md +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/asset_read_core.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/budget_allocator.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/comprehender.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/index.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/ingestion.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/legacy_migration.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/models.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/ocr.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-000.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-001.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-002.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-003.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-004.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-005.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-006.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-007.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-008.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-009.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-010.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-011.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-012.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-013.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-014.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-015.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-016.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-017.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-018.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-019.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/ascii/f-020.txt +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/index.html +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/owl/show-owl.sh +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/paths.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/plan_binding.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/planner_context.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/planner_tools.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/prompts.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/replanner_context.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/surface.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/untrusted_content.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/usage_logger.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/worker_mirror.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/worker_section.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/assets/worker_tools.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/atomic_io.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/auth_diagnostics.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/background_runner.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/branding.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/budget_policy.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/build_identity.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/builtin_hooks/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/builtin_hooks/notify_done_windows.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/bwrap_etc.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/capabilities.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/chatgpt_codex_static_provider.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/assets_cli.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/assets_modal.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/chat/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/chat/mid_turn_policy.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/chat/rendering.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/chat/state.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/chat_resume.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/_shared.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/auth.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/chat_resume_helpers.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/chat_state.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/chat_status.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/chat_terminal.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/chat_tui_panels.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/cli_common.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/cli_surface.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/config.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/conventions.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/execution_helpers.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/extensions.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/forge.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/forge_asset_view.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/forge_helpers.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/hooks.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/ide_bridge.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/mcp.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/profile.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/prompt_helpers.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/report.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/root.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/sandbox.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/server.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/sessions.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/startup.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/tools.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/commands/update.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/config_menu.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/forge.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/forge_recovery.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/setup_wizard.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/app.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/config.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/config_overlay.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/footer.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/forge_status.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/markdown.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/owl.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/plan_meta.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/selection_bindings.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/setup_app.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/setup_flow.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/state.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/subagent_identity.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/subagent_panel.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/surface.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/transcript.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/update_prompt.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/cli_impl/tui/workspace_guard.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/clipboard.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/code_review.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/compaction/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/compaction/conversation_compactor.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/compaction/importance.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/compaction/settings.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/compaction/tool_output_offload.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/conflict_auto_resolver.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/context/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/context/tool_schema_budgeter.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/crash_diagnostics.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/custom_tools/README.md +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/custom_tools/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/custom_tools/discovery.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/custom_tools/runtime.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/custom_tools/session.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/custom_tools/trust.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/diff_paths.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/direction_change.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/dispatch_timing.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/durable_service_manager.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/edit_discipline.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/error_text.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/execution_context.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/execution_deadline.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/execution_shared.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/extensions/README.md +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/extensions/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/extensions/activation.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/extensions/install.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/extensions/manifest.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/extensions/models.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/extensions/paths.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/extensions/registry.json +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/extensions/registry.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/extensions/state.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/extensions/workspace_trust.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/failed_task_evidence.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/failure_category.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/feedback_report.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/file_classification.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/forge.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/forge_completion.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/forge_events.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/frontmatter_utils.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/git_evidence.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/git_ops.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/git_safe.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/git_worktrees.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/hooks/README.md +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/hooks/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/hooks/audit.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/hooks/config.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/hooks/dispatcher.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/hooks/models.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/hooks/trust.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/host_actions.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/host_browser.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/activity_events.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/approvals.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/artifacts.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/browser_egress_proxy.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/cdp_websocket_transport.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/change_ledger.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/context_blocks.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/event_stream.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/forge_protocol.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/forge_request_ledger.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/health.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/managed_browser.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/mcp_oauth_coordinator.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/mcp_oauth_lifecycle.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/prompt_queue.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/protocol.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/resumable_swarm.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/session_search.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/stdio_bridge.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/structured_state.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/ide/swarm_protocol.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/integration_gate.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/interactive_input_guard.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/interactive_plan_mode.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/internal_artifacts.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/knowledge_base.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/knowledge_capture.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/knowledge_librarian.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/language_policy.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/litellm_static_provider.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/anthropic_messages.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/base.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/cache_capabilities.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/cache_control_blocks.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/cache_policy.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/gemini_interactions.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/metadata.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/protocols.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/request_plan.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/request_shape.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/temperature_compat.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/types.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm/usage_normalization.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/llm_error_display.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/logging_redaction.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/managed_host_deadline.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/README.md +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/client.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/config.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/errors.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/forge_scope.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/jsonrpc.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/manager.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/models.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/oauth.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/oauth_runtime.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/oauth_store.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/prompts.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/resources.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/roots.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/server_requests.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/token_store.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/transport_http.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/transport_stdio.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/mcp/untrusted_content.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/merge_conflict_reviewer.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/model_catalog/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/model_catalog/chatgpt_codex_subscription_snapshot.json +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.json +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.meta.json +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/model_metadata_policy.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/model_metadata_utils.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/model_router.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/permission_policy.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/personas.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/pipeline_facts.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/plan_assistant.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/plan_mode.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/plan_reconciliation.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/plan_repair.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/plan_validation.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/planning_constraints.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/policy.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/preview_server.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/process_reaping.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/profiles.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/provider_auth/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/provider_auth/base.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/provider_auth/openai_codex.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/provider_auth/registry.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/provider_auth/store.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/provider_diagnostics.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/provider_model_catalog.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/provider_telemetry.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/provider_url.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/remote_sync.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/replanning.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/repo_scan.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/request_estimation.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/review_gate.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/run_lock.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/run_outcome.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/run_provenance.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/run_state.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/runtime_artifacts.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/runtime_context_features.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/runtime_kind.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/safety/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/safety/mcp_sanitize.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/safety/safe_http.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/safety/subagent_report.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/sandbox_doctor.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/sandbox_runner.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/sandbox_settings.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/serialized_paths.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/server/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/server/app.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/server/auth.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/server/job_config.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/server/settings.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/server/store.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/server/worker_runner.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/service_persistence.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/session_artifacts.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/session_metrics.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/session_store.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/install.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/loader.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/matching.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/scaffold.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/transactions.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/skills/validation.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/step_budget.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/subagent_labels.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/subagents.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/surface/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/surface/base.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/surface/console.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/surface/events.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/surface/hidden_surface.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/surface/noop_surface.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/surface/rich_surface.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/surface/styles.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/surface/theme.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/surface/types.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/swarm_backend.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/swarm_orchestrator.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/swarm_scheduler.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/swarm_trace.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/swarm_worker.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/swarm_write_guard.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/task_dependencies.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/task_readiness.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/task_scope.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/terminal_manager.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/terminal_ownership.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/text_normalization.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/token_budget.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/README.md +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/__init__.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/artifacts.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/availability.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/fs.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/git.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/history.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/http_timeout.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/image_generation.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/repo_map.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/search.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/shell.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/symbols.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/test_discovery.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/web.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/web_search_dashscope.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/web_search_ddgs.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/tools/web_search_tavily.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/transport_retry.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/updates.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/usage_tracker.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/verification_contract.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/verification_failure_summary.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/verification_repair.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/verify_gate.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/web_research.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/web_search_adapters.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/web_search_policy.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/workspace_binding.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/workspace_binding_ui.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/workspace_context.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/src/alysis_code/workspace_isolation.py +0 -0
- {alysis_code-0.13.3 → alysis_code-0.13.5}/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.
|
|
3
|
+
Version: 0.13.5
|
|
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,57 @@ 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.5] - 2026-09-07
|
|
412
|
+
|
|
413
|
+
### Added
|
|
414
|
+
|
|
415
|
+
- Ship eight bundled workflow skills: `address-pr-comments`, `code-review`,
|
|
416
|
+
`commit`, `debug`, `fix-ci`, `release-notes`, `security-review`, and `skill-creator`.
|
|
417
|
+
- Select a relevant skill automatically with a bounded, reasoning-off model call;
|
|
418
|
+
read its instructions before other task tools, with ordinary routing as fallback.
|
|
419
|
+
- Invoke skills with `$<name> [task]` at an idle chat prompt, with live completion
|
|
420
|
+
and one-turn attachment. `/skill` remains supported.
|
|
421
|
+
- Add `bundled_skills_enabled` configuration, project and user override precedence,
|
|
422
|
+
and model-in-loop bundled workflow evaluations with launch-readiness checks.
|
|
423
|
+
|
|
424
|
+
### Fixed
|
|
425
|
+
|
|
426
|
+
- Harden skill instruction boundaries, selection ordering, and per-turn cleanup.
|
|
427
|
+
- Preserve resolved skill settings in child agents and restore slash completion.
|
|
428
|
+
- Recognize silent and inline verification results and preserve authoritative
|
|
429
|
+
verification evidence when supplemental checks run.
|
|
430
|
+
- Bound stalled OpenAI-compatible and Responses streams, including traffic that
|
|
431
|
+
contains no meaningful progress.
|
|
432
|
+
|
|
433
|
+
## [0.13.4] - 2026-09-05
|
|
434
|
+
|
|
435
|
+
Model-catalog and TUI-access refresh.
|
|
436
|
+
|
|
437
|
+
### Added
|
|
438
|
+
|
|
439
|
+
- Added GPT-6 Astra as the default OpenAI model, with aliases, pricing, context-window,
|
|
440
|
+
reasoning, OpenRouter, and ChatGPT-subscription metadata.
|
|
441
|
+
- Added newly available first-party and gateway routes for Claude Fable 5.1, Gemini 3.8
|
|
442
|
+
Flash, Qwen 3.8, GLM-5.3, Kimi K3, Doubao Seed 2.1, DeepSeek V4 snapshots, Grok 4.6,
|
|
443
|
+
and related hosted variants.
|
|
444
|
+
|
|
445
|
+
### Changed
|
|
446
|
+
|
|
447
|
+
- Refreshed every hosted preset's model picker, aliases, validation model, retirement
|
|
448
|
+
mappings, pricing, context limits, and reasoning contracts against provider catalogs.
|
|
449
|
+
- Updated TUI model labels to preserve vendor naming and made profile pickers show each
|
|
450
|
+
profile's model, host, active state, retired-model state, and duplicates.
|
|
451
|
+
- Migrated the Perplexity preset from the retiring Sonar Chat Completions endpoint to the
|
|
452
|
+
Agent API, including hosted web search and saved-profile migration.
|
|
453
|
+
- Replaced the OpenAI economy and validation model with GPT-5.6 Luna and kept
|
|
454
|
+
GPT-5.3 Codex limited to the Responses preset.
|
|
455
|
+
|
|
456
|
+
### Fixed
|
|
457
|
+
|
|
458
|
+
- OpenAI Chat Completions now uses `max_completion_tokens` for GPT-5 and newer models.
|
|
459
|
+
- Native Gemini tool and response schemas are projected onto Gemini's supported OpenAPI
|
|
460
|
+
subset before requests are sent.
|
|
461
|
+
|
|
411
462
|
## [0.13.3] - 2026-08-28
|
|
412
463
|
|
|
413
464
|
### Fixed
|
|
@@ -777,7 +777,7 @@ def record_acceptance_tool_effect(
|
|
|
777
777
|
if durable_criterion_ids
|
|
778
778
|
else _block_session_owned_service_criteria(contract=contract)
|
|
779
779
|
)
|
|
780
|
-
if
|
|
780
|
+
if normalized_tool in {"verify_run", "shell_run"}:
|
|
781
781
|
criterion_ids.extend(
|
|
782
782
|
_update_repo_surface_criteria(
|
|
783
783
|
contract=contract,
|
|
@@ -1031,6 +1031,33 @@ def _clause_path_role(clause: str) -> AcceptancePathRole:
|
|
|
1031
1031
|
return AcceptancePathRole.UNKNOWN_REFERENCE
|
|
1032
1032
|
|
|
1033
1033
|
|
|
1034
|
+
def _path_role(
|
|
1035
|
+
clause: str,
|
|
1036
|
+
path_match: re.Match[str],
|
|
1037
|
+
) -> AcceptancePathRole:
|
|
1038
|
+
path_start = path_match.start(1)
|
|
1039
|
+
preservation = None
|
|
1040
|
+
for candidate in _PRESERVATION_ROLE_RE.finditer(clause):
|
|
1041
|
+
if candidate.start() >= path_start:
|
|
1042
|
+
break
|
|
1043
|
+
preservation = candidate
|
|
1044
|
+
if preservation is None:
|
|
1045
|
+
return _clause_path_role(clause)
|
|
1046
|
+
if path_start < preservation.end():
|
|
1047
|
+
return AcceptancePathRole.PRESERVATION_TARGET
|
|
1048
|
+
|
|
1049
|
+
boundary = clause.rfind(",", preservation.end(), path_start)
|
|
1050
|
+
if boundary < 0:
|
|
1051
|
+
return AcceptancePathRole.PRESERVATION_TARGET
|
|
1052
|
+
scope_is_complete = bool(re.search(r"\b(?:unchanged|intact)\s*$", preservation.group(0), re.I))
|
|
1053
|
+
prior_path = _PATH_RE.search(clause, preservation.end(), boundary)
|
|
1054
|
+
# A completed state phrase ends at the comma. An open direct-object phrase
|
|
1055
|
+
# carries across it only after binding a path, which preserves path lists.
|
|
1056
|
+
if not scope_is_complete and prior_path is not None:
|
|
1057
|
+
return AcceptancePathRole.PRESERVATION_TARGET
|
|
1058
|
+
return _clause_path_role(clause[boundary + 1 :])
|
|
1059
|
+
|
|
1060
|
+
|
|
1034
1061
|
def _clean_path_token(path: str) -> str:
|
|
1035
1062
|
cleaned = str(path or "").strip().strip("`'\"").replace("\\", "/")
|
|
1036
1063
|
cleaned = cleaned.rstrip(".,;:!?)]}")
|
|
@@ -1043,8 +1070,8 @@ def _extract_path_refs(*, root: Path, texts: list[str]) -> list[AcceptancePathRe
|
|
|
1043
1070
|
refs: list[AcceptancePathRef] = []
|
|
1044
1071
|
seen: set[tuple[str, str, str]] = set()
|
|
1045
1072
|
for clause in _iter_clauses(texts):
|
|
1046
|
-
role = _clause_path_role(clause)
|
|
1047
1073
|
for match in _PATH_RE.finditer(clause):
|
|
1074
|
+
role = _path_role(clause, match)
|
|
1048
1075
|
path_ref = _resolve_acceptance_path(
|
|
1049
1076
|
root=root,
|
|
1050
1077
|
raw_text=match.group(1),
|
|
@@ -1897,6 +1924,7 @@ def _update_repo_surface_criteria(
|
|
|
1897
1924
|
criterion.failure_summary = "Verification evidence was supplemental or unsafe"
|
|
1898
1925
|
elif passed is True:
|
|
1899
1926
|
criterion.status = AcceptanceCriterionStatus.PASSED
|
|
1927
|
+
criterion.failure_summary = ""
|
|
1900
1928
|
elif passed is False:
|
|
1901
1929
|
criterion.status = AcceptanceCriterionStatus.FAILED
|
|
1902
1930
|
criterion.failure_summary = f"Verification command failed: {command}"
|
|
@@ -286,7 +286,8 @@ _SYSTEM_PROMPT_SKILL_DISCOVERY_SECTION = """
|
|
|
286
286
|
|
|
287
287
|
Skills and skill_read
|
|
288
288
|
- The <skill_context> block lists every skill discovered for this session with its name and description. These descriptions tell you when each skill applies.
|
|
289
|
-
-
|
|
289
|
+
- Select only a skill whose action the user requests; a concept mention is not a match. Honor explicit exclusions and choose the most specific fit.
|
|
290
|
+
- BEFORE any other task action, call skill_read(name) for each selected skill.
|
|
290
291
|
- Use skill_read(name, path) for bundled references, scripts, or assets cited inside the skill body.
|
|
291
292
|
- Do not invent skill names. Only use names that appear in the <skill_context> block.
|
|
292
293
|
- Project-local explicit-turn skill context (when present) outranks this discovery list.
|
|
@@ -2261,6 +2262,7 @@ def prepare_session_prompt_context(
|
|
|
2261
2262
|
discover_skills(
|
|
2262
2263
|
focus_path=workspace_context.focus_path,
|
|
2263
2264
|
workspace_root=workspace_context.workspace_root,
|
|
2265
|
+
cfg=session_cfg,
|
|
2264
2266
|
)
|
|
2265
2267
|
if resolved_skills_enabled
|
|
2266
2268
|
else DiscoveredSkills(skills={}, ordered=(), issues=())
|
|
@@ -2420,7 +2422,10 @@ def prepare_session_prompt_context(
|
|
|
2420
2422
|
workspace_root=workspace_context.workspace_root,
|
|
2421
2423
|
)
|
|
2422
2424
|
skill_context = (
|
|
2423
|
-
build_skill_advertise_block(
|
|
2425
|
+
build_skill_advertise_block(
|
|
2426
|
+
skills=discovered_skills.ordered,
|
|
2427
|
+
skills_auto_invoke=skills_auto_invoke,
|
|
2428
|
+
)
|
|
2424
2429
|
if resolved_skills_enabled
|
|
2425
2430
|
else None
|
|
2426
2431
|
)
|
|
@@ -41,6 +41,7 @@ from pathlib import Path, PurePosixPath
|
|
|
41
41
|
from typing import Any
|
|
42
42
|
|
|
43
43
|
from ..branding import env_get
|
|
44
|
+
from ..verification_command_analysis import analyze_verification_command
|
|
44
45
|
from .turn_contract import TurnSemantics, TurnTaskShape
|
|
45
46
|
|
|
46
47
|
# ---------------------------------------------------------------------------
|
|
@@ -141,6 +142,8 @@ def _normalize_artifact_path(path: str) -> str:
|
|
|
141
142
|
|
|
142
143
|
|
|
143
144
|
def _command_path_tokens(command: str) -> list[str]:
|
|
145
|
+
if analyze_verification_command(command, trusted=True).uses_opaque_inline_code:
|
|
146
|
+
return []
|
|
144
147
|
tokens: list[str] = []
|
|
145
148
|
for raw in _COMMAND_TOKEN_SPLIT_RE.split(str(command or "")):
|
|
146
149
|
token = raw.strip().strip("`'\"").rstrip(_TOKEN_TRAILING_JUNK)
|
|
@@ -95,12 +95,13 @@ from ..llm.metadata import (
|
|
|
95
95
|
)
|
|
96
96
|
from ..llm.openai_compat import OpenAICompatClient as _OpenAICompatClient
|
|
97
97
|
from ..llm.protocols import OPENAI_COMPAT_PROTOCOL, get_provider_protocol_capabilities
|
|
98
|
+
from ..llm.provider_limits import ProviderRetrySettings, resolve_provider_retry_settings
|
|
98
99
|
from ..llm.types import UsageConfidence, UsageSource
|
|
99
100
|
from ..mcp.config import load_resolved_mcp_config
|
|
100
101
|
from ..mcp.manager import ForgeTaskScopedMcpManager, McpManager, create_mcp_manager
|
|
101
102
|
from ..model_metadata_policy import ActiveModelRef, evaluate_active_model_metadata_policy
|
|
102
103
|
from ..model_registry import ModelRegistry, resolve_model_provider_key
|
|
103
|
-
from ..model_router import ROLE_CODING, ROLE_COMPACTOR, resolve_model_for_role
|
|
104
|
+
from ..model_router import ROLE_CODING, ROLE_COMPACTOR, ROLE_ROUTER, resolve_model_for_role
|
|
104
105
|
from ..personas import (
|
|
105
106
|
PersonaSwitchState,
|
|
106
107
|
load_custom_personas,
|
|
@@ -235,6 +236,15 @@ from .subagent_execution import ChildScheduler
|
|
|
235
236
|
|
|
236
237
|
OpenAICompatClient = _OpenAICompatClient
|
|
237
238
|
_DEFAULT_CREATE_MCP_MANAGER = create_mcp_manager
|
|
239
|
+
_SKILL_SELECTOR_TIMEOUT_S = 15.0
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
def _skill_selector_provider_retry_settings(
|
|
243
|
+
cfg: AppConfig | None,
|
|
244
|
+
) -> ProviderRetrySettings:
|
|
245
|
+
"""Keep the optional selector to one provider attempt on every protocol."""
|
|
246
|
+
|
|
247
|
+
return replace(resolve_provider_retry_settings(cfg), disable_retries=True)
|
|
238
248
|
|
|
239
249
|
|
|
240
250
|
def _build_workspace_trust_prompt(
|
|
@@ -2197,7 +2207,16 @@ def create_session(
|
|
|
2197
2207
|
role=ROLE_COMPACTOR,
|
|
2198
2208
|
plan=None,
|
|
2199
2209
|
)
|
|
2210
|
+
router_model_name = ""
|
|
2211
|
+
if resolved_skills_enabled and skills_auto_invoke and bool(discovered_skills.ordered):
|
|
2212
|
+
router_model_name = resolve_model_for_role(
|
|
2213
|
+
cfg=session_cfg,
|
|
2214
|
+
role=ROLE_ROUTER,
|
|
2215
|
+
plan=None,
|
|
2216
|
+
)
|
|
2200
2217
|
active_model_refs = [ActiveModelRef(role=ROLE_CODING, model_name=session_cfg.model)]
|
|
2218
|
+
if router_model_name:
|
|
2219
|
+
active_model_refs.append(ActiveModelRef(role=ROLE_ROUTER, model_name=router_model_name))
|
|
2201
2220
|
if compactor_model_name:
|
|
2202
2221
|
active_model_refs.append(
|
|
2203
2222
|
ActiveModelRef(role=ROLE_COMPACTOR, model_name=compactor_model_name)
|
|
@@ -2220,6 +2239,35 @@ def create_session(
|
|
|
2220
2239
|
reasoning_effort=llm_reasoning_effort,
|
|
2221
2240
|
session_id=session_id,
|
|
2222
2241
|
)
|
|
2242
|
+
router_client: ChatClient | None = None
|
|
2243
|
+
if router_model_name:
|
|
2244
|
+
selector_timeout_s = min(llm_timeout_s, _SKILL_SELECTOR_TIMEOUT_S)
|
|
2245
|
+
router_client = _make_session_llm_client(
|
|
2246
|
+
cfg=session_cfg,
|
|
2247
|
+
api_key=api_key,
|
|
2248
|
+
model=router_model_name,
|
|
2249
|
+
timeout_s=selector_timeout_s,
|
|
2250
|
+
temperature=0.0,
|
|
2251
|
+
prompt_cache_key=prompt_cache_stream_key,
|
|
2252
|
+
prompt_cache_retention=resolve_prompt_cache_retention(session_cfg),
|
|
2253
|
+
prompt_cache_namespace=_prompt_cache_namespace(ROLE_ROUTER),
|
|
2254
|
+
enable_thinking=False,
|
|
2255
|
+
reasoning_effort="",
|
|
2256
|
+
session_id=session_id,
|
|
2257
|
+
)
|
|
2258
|
+
# Client adapters normalize an empty effort to ``None``. Keep the
|
|
2259
|
+
# selector's session-owned state explicit so later in-place reloads and
|
|
2260
|
+
# stale-client checks preserve the reasoning-off contract verbatim.
|
|
2261
|
+
router_client.reasoning_effort = ""
|
|
2262
|
+
if hasattr(router_client, "stream_no_progress_timeout_s"):
|
|
2263
|
+
router_client.stream_no_progress_timeout_s = min(
|
|
2264
|
+
float(router_client.stream_no_progress_timeout_s),
|
|
2265
|
+
selector_timeout_s,
|
|
2266
|
+
)
|
|
2267
|
+
if hasattr(router_client, "provider_retry_settings"):
|
|
2268
|
+
router_client.provider_retry_settings = _skill_selector_provider_retry_settings(
|
|
2269
|
+
session_cfg
|
|
2270
|
+
)
|
|
2223
2271
|
sessions_dir = (
|
|
2224
2272
|
session_log_dir_override
|
|
2225
2273
|
if session_log_dir_override is not None
|
|
@@ -2413,7 +2461,7 @@ def create_session(
|
|
|
2413
2461
|
"task_max_steps": session_cfg.task_max_steps,
|
|
2414
2462
|
"subagent_max_steps": session_cfg.subagent_max_steps,
|
|
2415
2463
|
"model": session_cfg.model,
|
|
2416
|
-
"router_model":
|
|
2464
|
+
"router_model": router_model_name,
|
|
2417
2465
|
"base_url_descriptor": endpoint_descriptor(session_cfg.base_url),
|
|
2418
2466
|
"profile_name": active_profile.name,
|
|
2419
2467
|
"protocol": active_profile.protocol,
|
|
@@ -3134,6 +3182,9 @@ def create_session(
|
|
|
3134
3182
|
surface=surface,
|
|
3135
3183
|
store=store,
|
|
3136
3184
|
client=client,
|
|
3185
|
+
router_client=router_client,
|
|
3186
|
+
_semantic_router_bound_client=client,
|
|
3187
|
+
_provisioned_router_client=router_client,
|
|
3137
3188
|
persona_client_cache={(session_cfg.model, coding_temperature): client},
|
|
3138
3189
|
persona_client_key=(session_cfg.model, coding_temperature),
|
|
3139
3190
|
model_registry=registry,
|
|
@@ -859,6 +859,7 @@ class SubagentLauncher:
|
|
|
859
859
|
non_interactive: bool,
|
|
860
860
|
verification_enabled: bool,
|
|
861
861
|
authoritative_verification_commands: list[str] | None,
|
|
862
|
+
skills_enabled: bool,
|
|
862
863
|
subagents_enabled: bool,
|
|
863
864
|
subagent_depth: int,
|
|
864
865
|
subagent_registry: dict[str, SubagentDefinition] | None,
|
|
@@ -898,6 +899,7 @@ class SubagentLauncher:
|
|
|
898
899
|
self.non_interactive = non_interactive
|
|
899
900
|
self.verification_enabled = verification_enabled
|
|
900
901
|
self.authoritative_verification_commands = authoritative_verification_commands
|
|
902
|
+
self.skills_enabled = bool(skills_enabled)
|
|
901
903
|
self.subagents_enabled = subagents_enabled
|
|
902
904
|
self.subagent_depth = subagent_depth
|
|
903
905
|
self.subagent_registry = subagent_registry
|
|
@@ -1833,6 +1835,11 @@ class SubagentLauncher:
|
|
|
1833
1835
|
return {"error": f"Subagent model resolution failed: {e}"}
|
|
1834
1836
|
subagent_cfg.model = selected_model
|
|
1835
1837
|
subagent_cfg.routing_mode = _ROUTING_MODE_CODE_ONLY
|
|
1838
|
+
# Skills are an independent session capability, not an implicit part of
|
|
1839
|
+
# delegation. Preserve the parent's resolved master switch explicitly;
|
|
1840
|
+
# bundled/custom discovery in the child continues to follow normal skill
|
|
1841
|
+
# configuration only when that switch is enabled.
|
|
1842
|
+
subagent_cfg.skills_enabled = self.skills_enabled
|
|
1836
1843
|
resolved_temperature = resolve_role_temperature(subagent_cfg, role=temperature_role)
|
|
1837
1844
|
subagent_cfg.temperature = resolved_temperature
|
|
1838
1845
|
subagent_cfg.coding_temperature = resolved_temperature
|
|
@@ -4417,6 +4417,7 @@ def build_tools(
|
|
|
4417
4417
|
non_interactive=non_interactive,
|
|
4418
4418
|
verification_enabled=verification_enabled,
|
|
4419
4419
|
authoritative_verification_commands=authoritative_verify_commands,
|
|
4420
|
+
skills_enabled=skills_enabled,
|
|
4420
4421
|
subagents_enabled=subagents_enabled,
|
|
4421
4422
|
subagent_depth=subagent_depth,
|
|
4422
4423
|
subagent_registry=subagent_registry,
|
|
@@ -4597,6 +4598,7 @@ def build_tools(
|
|
|
4597
4598
|
non_interactive=non_interactive,
|
|
4598
4599
|
verification_enabled=verification_enabled,
|
|
4599
4600
|
authoritative_verification_commands=authoritative_verify_commands,
|
|
4601
|
+
skills_enabled=skills_enabled,
|
|
4600
4602
|
subagents_enabled=True,
|
|
4601
4603
|
subagent_depth=subagent_depth,
|
|
4602
4604
|
subagent_registry=subagent_registry,
|