alysis-code 0.13.0__tar.gz → 0.13.3__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/PKG-INFO +211 -0
- alysis_code-0.13.3/README.md +153 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3/docs}/CHANGELOG.md +47 -1
- {alysis_code-0.13.0 → alysis_code-0.13.3}/pyproject.toml +9 -6
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/__init__.py +1 -1
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/account_login.py +37 -5
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/turn/core.py +31 -3
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/branding.py +12 -30
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/budget_policy.py +46 -3
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli.py +4 -9
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/app.py +476 -44
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/config_overlay.py +3 -2
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/owl.py +21 -9
- alysis_code-0.13.3/src/alysis_code/cli_impl/tui/selection_bindings.py +39 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/setup_app.py +38 -6
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/workspace_guard.py +3 -2
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/crash_diagnostics.py +9 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/openai_compat.py +5 -1
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/provider_limits.py +50 -7
- alysis_code-0.13.3/src/alysis_code/transport_retry.py +244 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/updates.py +10 -9
- alysis_code-0.13.0/PKG-INFO +0 -507
- alysis_code-0.13.0/README.md +0 -449
- {alysis_code-0.13.0 → alysis_code-0.13.3}/.gitignore +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/LICENSE +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/NOTICE +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/__main__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/_build_info.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/README.md +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/acceptance_contract.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/blast_radius.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/cache_keepalive.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/completion_certificate.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/completion_gate.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/empty_response_stall.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/errors.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/llm_calls.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/mutation_classification.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/prompt_context.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/read_ledger.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/regression_baseline.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/reproduction_first.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/sensitive_output.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/session.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/steering.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/subagent_execution.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/subagent_workspace.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/tools_assembly.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/turn/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/turn/events.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/turn/exploration.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/turn/interventions.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/turn/read_cache.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/turn/snapshot.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/turn_contract.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/turn_path.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/verification.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/verification_commands.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent/verification_evidence.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent_loop.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/base.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/builtins.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/codex_cli.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/host.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/registry.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/service.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agentbox_client.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/agentbox_integration.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/alysis_cloud.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/approval_scope.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/README.md +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/asset_read_core.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/budget_allocator.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/comprehender.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/index.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/ingestion.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/legacy_migration.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/models.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/ocr.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-000.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-001.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-002.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-003.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-004.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-005.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-006.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-007.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-008.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-009.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-010.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-011.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-012.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-013.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-014.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-015.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-016.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-017.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-018.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-019.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-020.txt +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/index.html +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/owl/show-owl.sh +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/paths.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/plan_binding.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/planner_context.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/planner_tools.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/prompts.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/replanner_context.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/surface.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/untrusted_content.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/usage_logger.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/worker_mirror.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/worker_section.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/assets/worker_tools.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/atomic_io.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/auth_diagnostics.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/background_runner.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/build_identity.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/builtin_hooks/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/builtin_hooks/notify_done_windows.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/bwrap_etc.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cancellation.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/capabilities.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/chatgpt_codex_static_provider.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/assets_cli.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/assets_modal.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat/commands.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat/loop.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat/mid_turn_policy.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat/rendering.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat/state.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat_resume.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat_slash_completer.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/_shared.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/auth.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/chat_resume_helpers.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/chat_state.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/chat_status.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/chat_terminal.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/chat_tui_panels.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/cli_common.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/cli_surface.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/config.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/conventions.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/execution_helpers.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/extensions.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/forge.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/forge_asset_view.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/forge_helpers.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/hooks.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/ide_bridge.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/mcp.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/profile.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/prompt_helpers.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/report.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/root.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/sandbox.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/server.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/sessions.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/skills.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/startup.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/tools.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/update.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/welcome.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/config_menu.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/forge.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/forge_recovery.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/setup_wizard.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/config.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/config_flow.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/content.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/footer.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/forge_status.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/markdown.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/plan_meta.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/setup_flow.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/state.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/subagent_identity.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/subagent_panel.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/surface.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/transcript.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/update_prompt.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/clipboard.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/code_review.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/compaction/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/compaction/conversation_compactor.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/compaction/importance.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/compaction/settings.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/compaction/tool_output_offload.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/config.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/conflict_auto_resolver.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/context/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/context/tool_schema_budgeter.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/custom_tools/README.md +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/custom_tools/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/custom_tools/discovery.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/custom_tools/runtime.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/custom_tools/session.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/custom_tools/trust.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/diff_paths.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/direction_change.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/dispatch_timing.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/durable_service_manager.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/edit_discipline.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/error_text.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/execution_budget.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/execution_context.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/execution_deadline.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/execution_shared.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/extensions/README.md +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/extensions/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/extensions/activation.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/extensions/install.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/extensions/manifest.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/extensions/models.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/extensions/paths.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/extensions/registry.json +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/extensions/registry.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/extensions/state.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/extensions/workspace_trust.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/failed_task_evidence.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/failure_category.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/feedback_report.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/file_classification.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/forge.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/forge_completion.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/forge_events.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/frontmatter_utils.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/git_evidence.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/git_ops.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/git_safe.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/git_worktrees.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/hooks/README.md +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/hooks/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/hooks/audit.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/hooks/config.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/hooks/dispatcher.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/hooks/models.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/hooks/trust.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/host_actions.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/host_browser.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/activity_events.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/approvals.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/artifacts.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/browser_egress_proxy.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/cdp_websocket_transport.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/change_ledger.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/context_blocks.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/event_stream.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/forge_protocol.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/forge_request_ledger.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/health.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/managed_browser.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/management_protocol.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/mcp_oauth_coordinator.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/mcp_oauth_lifecycle.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/prompt_queue.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/protocol.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/resumable_swarm.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/session_search.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/stdio_bridge.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/structured_state.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/ide/swarm_protocol.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/integration_gate.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/interactive_input_guard.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/interactive_plan_mode.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/internal_artifacts.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/knowledge_base.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/knowledge_capture.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/knowledge_librarian.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/language_policy.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/litellm_static_provider.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/anthropic_messages.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/base.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/cache_capabilities.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/cache_control_blocks.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/cache_policy.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/factory.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/gemini_generate_content.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/gemini_interactions.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/metadata.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/openai_responses.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/protocols.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/request_plan.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/request_shape.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/streaming.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/temperature_compat.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/types.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm/usage_normalization.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/llm_error_display.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/logging_redaction.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/managed_host_deadline.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/README.md +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/client.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/config.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/errors.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/forge_scope.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/jsonrpc.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/manager.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/models.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/oauth.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/oauth_runtime.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/oauth_store.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/prompts.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/resources.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/roots.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/server_requests.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/token_store.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/transport_http.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/transport_stdio.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/mcp/untrusted_content.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/merge_conflict_reviewer.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/model_catalog/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/model_catalog/chatgpt_codex_subscription_snapshot.json +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.json +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.meta.json +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/model_metadata_policy.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/model_metadata_utils.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/model_registry.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/model_router.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/permission_policy.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/personas.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/pipeline_facts.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/plan_assistant.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/plan_mode.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/plan_reconciliation.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/plan_repair.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/plan_validation.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/planning_constraints.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/policy.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/preview_server.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/process_reaping.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/profile_presets.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/profiles.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/provider_auth/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/provider_auth/base.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/provider_auth/openai_codex.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/provider_auth/registry.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/provider_auth/store.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/provider_diagnostics.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/provider_model_catalog.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/provider_telemetry.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/provider_url.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/reasoning_contracts.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/remote_sync.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/replanning.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/repo_scan.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/request_estimation.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/review_gate.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/run_lock.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/run_outcome.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/run_provenance.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/run_state.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/runtime_artifacts.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/runtime_context_features.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/runtime_kind.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/safety/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/safety/mcp_sanitize.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/safety/safe_http.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/safety/subagent_report.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/sandbox_doctor.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/sandbox_runner.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/sandbox_settings.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/serialized_paths.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/server/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/server/app.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/server/auth.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/server/job_config.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/server/settings.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/server/store.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/server/worker_runner.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/service_persistence.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/session_artifacts.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/session_metrics.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/session_store.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/README.md +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/conventions.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/discovery.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/eval_models.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/eval_runner.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/evals.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/install.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/loader.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/matching.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/models.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/paths.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/prompting.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/scaffold.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/state.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/transactions.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/skills/validation.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/step_budget.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/subagent_labels.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/subagents.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/surface/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/surface/base.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/surface/console.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/surface/events.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/surface/hidden_surface.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/surface/noop_surface.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/surface/rich_surface.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/surface/styles.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/surface/theme.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/surface/types.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/swarm_backend.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/swarm_orchestrator.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/swarm_scheduler.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/swarm_trace.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/swarm_worker.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/swarm_write_guard.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/task_dependencies.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/task_readiness.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/task_scope.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/terminal_manager.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/terminal_ownership.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/text_normalization.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/token_budget.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/README.md +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/__init__.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/artifacts.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/availability.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/fs.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/git.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/history.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/http_timeout.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/image_generation.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/registry.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/repo_map.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/search.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/shell.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/symbols.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/test_discovery.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/web.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/web_search.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/web_search_dashscope.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/web_search_ddgs.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/web_search_provider_adapters.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/tools/web_search_tavily.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/usage_tracker.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/verification_command_analysis.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/verification_contract.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/verification_failure_summary.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/verification_repair.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/verify_gate.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/web_research.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/web_search_adapters.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/web_search_policy.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/workspace_binding.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/workspace_binding_ui.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/workspace_context.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/workspace_isolation.py +0 -0
- {alysis_code-0.13.0 → alysis_code-0.13.3}/src/alysis_code/workspace_provisioning.py +0 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: alysis-code
|
|
3
|
+
Version: 0.13.3
|
|
4
|
+
Summary: Local CLI coding agent powered by any API.
|
|
5
|
+
Project-URL: Changelog, https://github.com/AlysisAi/alysis-code/blob/main/docs/CHANGELOG.md
|
|
6
|
+
Project-URL: Documentation, https://github.com/AlysisAi/alysis-code/tree/main/docs
|
|
7
|
+
Project-URL: Funding, https://github.com/sponsors/AlysisAi
|
|
8
|
+
Project-URL: Issues, https://github.com/AlysisAi/alysis-code/issues
|
|
9
|
+
Project-URL: Security, https://github.com/AlysisAi/alysis-code/blob/main/.github/SECURITY.md
|
|
10
|
+
Project-URL: Source, https://github.com/AlysisAi/alysis-code
|
|
11
|
+
License: Apache-2.0
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
License-File: NOTICE
|
|
14
|
+
Keywords: agent,api,cli,coding-agent,developer-tools,llm
|
|
15
|
+
Classifier: Environment :: Console
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
18
|
+
Classifier: Operating System :: MacOS
|
|
19
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
20
|
+
Classifier: Programming Language :: Python :: 3
|
|
21
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
25
|
+
Classifier: Topic :: Software Development
|
|
26
|
+
Classifier: Topic :: Utilities
|
|
27
|
+
Requires-Python: >=3.11
|
|
28
|
+
Requires-Dist: click>=8.0.0
|
|
29
|
+
Requires-Dist: cryptography>=50.0.0
|
|
30
|
+
Requires-Dist: ddgs>=9.0.0
|
|
31
|
+
Requires-Dist: h2>=4.4.1
|
|
32
|
+
Requires-Dist: httpcore<2.0.0,>=1.0.0
|
|
33
|
+
Requires-Dist: httpx>=0.27.0
|
|
34
|
+
Requires-Dist: keyring>=25.0.0
|
|
35
|
+
Requires-Dist: packaging>=23.0
|
|
36
|
+
Requires-Dist: pillow>=12.3.0
|
|
37
|
+
Requires-Dist: platformdirs>=4.2.0
|
|
38
|
+
Requires-Dist: prompt-toolkit>=3.0.43
|
|
39
|
+
Requires-Dist: pydantic>=2.6.0
|
|
40
|
+
Requires-Dist: rich>=13.7.1
|
|
41
|
+
Requires-Dist: tiktoken>=0.7.0
|
|
42
|
+
Requires-Dist: typer>=0.12.0
|
|
43
|
+
Requires-Dist: websockets<17.0,>=15.0
|
|
44
|
+
Provides-Extra: dev
|
|
45
|
+
Requires-Dist: editables==0.5; extra == 'dev'
|
|
46
|
+
Requires-Dist: hatchling==1.31.0; extra == 'dev'
|
|
47
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
48
|
+
Requires-Dist: pyyaml>=6.0.0; extra == 'dev'
|
|
49
|
+
Requires-Dist: ruff>=0.6.0; extra == 'dev'
|
|
50
|
+
Provides-Extra: managed-build
|
|
51
|
+
Requires-Dist: pyinstaller-hooks-contrib==2026.6; extra == 'managed-build'
|
|
52
|
+
Requires-Dist: pyinstaller==6.21.0; extra == 'managed-build'
|
|
53
|
+
Provides-Extra: server
|
|
54
|
+
Requires-Dist: fastapi>=0.115; extra == 'server'
|
|
55
|
+
Requires-Dist: python-multipart>=0.0.9; extra == 'server'
|
|
56
|
+
Requires-Dist: uvicorn[standard]>=0.30; extra == 'server'
|
|
57
|
+
Description-Content-Type: text/markdown
|
|
58
|
+
|
|
59
|
+
<p align="center">
|
|
60
|
+
<picture>
|
|
61
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/banner-dark.svg">
|
|
62
|
+
<img src="docs/assets/banner.svg" alt="Alysis Code — Everyone's Coding Agent" width="720">
|
|
63
|
+
</picture>
|
|
64
|
+
</p>
|
|
65
|
+
|
|
66
|
+
<p align="center">
|
|
67
|
+
Local CLI coding agent that turns plans into reviewed, PR-ready code.<br>
|
|
68
|
+
Bring your own model. Sandboxed by default.
|
|
69
|
+
</p>
|
|
70
|
+
|
|
71
|
+
<p align="center">
|
|
72
|
+
<a href="https://alysiscode.com/">Website</a> ·
|
|
73
|
+
<a href="https://github.com/AlysisAi/alysis-code/tree/main/docs">Docs</a> ·
|
|
74
|
+
<a href="https://github.com/AlysisAi/alysis-code/blob/main/docs/CHANGELOG.md">Changelog</a>
|
|
75
|
+
</p>
|
|
76
|
+
|
|
77
|
+
<p align="center">
|
|
78
|
+
<a href="https://github.com/sponsors/AlysisAi"><img src="https://img.shields.io/github/sponsors/AlysisAi?label=Sponsor&logo=GitHub" alt="GitHub Sponsors"></a>
|
|
79
|
+
</p>
|
|
80
|
+
|
|
81
|
+
<p align="center">
|
|
82
|
+
<a href="https://github.com/AlysisAi/alysis-code/actions/workflows/ci.yml"><img src="https://github.com/AlysisAi/alysis-code/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
83
|
+
<a href="https://pypi.org/project/alysis-code/"><img src="https://img.shields.io/pypi/v/alysis-code.svg" alt="PyPI version"></a>
|
|
84
|
+
<a href="https://pypi.org/project/alysis-code/"><img src="https://img.shields.io/pypi/pyversions/alysis-code.svg" alt="Python versions"></a>
|
|
85
|
+
<a href="https://github.com/AlysisAi/alysis-code/blob/main/LICENSE"><img src="https://img.shields.io/pypi/l/alysis-code.svg" alt="License"></a>
|
|
86
|
+
</p>
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Get Started
|
|
91
|
+
|
|
92
|
+
Alysis Code requires **Python 3.11+** and runs on macOS, Linux, and Windows.
|
|
93
|
+
|
|
94
|
+
**1 — Install**
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
pipx install alysis-code
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**2 — Launch in your project**
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
cd your-project
|
|
104
|
+
alysis-code
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
The first run opens a guided setup wizard: choose **Use an API key** or **Use an AI subscription**,
|
|
108
|
+
connect a provider, and pick your default model. Re-run it anytime with `alysis-code setup`.
|
|
109
|
+
(`alysis` works too, as a short alias.)
|
|
110
|
+
|
|
111
|
+
**3 — Start building**
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
alysis-code chat # interactive coding session
|
|
115
|
+
alysis-code run "Fix the failing tests" # one-shot task
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Bring your own key from any supported provider — or point Alysis Code at a local endpoint (Ollama,
|
|
119
|
+
LM Studio, vLLM) and run fully offline. The `/config` picker lists every preset. Full walkthrough:
|
|
120
|
+
[Quickstart guide](docs/quickstart.md).
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Why Alysis Code
|
|
125
|
+
|
|
126
|
+
- **Easy to use** — a full coding agent behind a clean, convenient terminal interface that anyone can
|
|
127
|
+
pick up and play with in minutes: slash commands, interactive pickers, and live status built in.
|
|
128
|
+
- **Built for every developer** — from solo scripts to team servers and CI, the same agent fits every
|
|
129
|
+
workflow.
|
|
130
|
+
- **[Forge Mode](https://alysiscode.com/docs/concepts/tasks)** — plan-driven execution for larger work:
|
|
131
|
+
plan, dispatch parallel workers, verify each task, ship PR-ready code.
|
|
132
|
+
- **[Orchestrated subagents](https://alysiscode.com/docs/concepts/agents)** — isolated workers run in
|
|
133
|
+
parallel, verification is pinned to their exact candidates, and changes apply only after host-side
|
|
134
|
+
conflict checks.
|
|
135
|
+
- **Free built-in web search** — model-independent `web_search` that works with any provider, at no
|
|
136
|
+
extra cost.
|
|
137
|
+
- **[Bring your own model](https://alysiscode.com/docs/config/models)** — OpenAI, Anthropic, DeepSeek,
|
|
138
|
+
Qwen, Gemini, Mistral, Xiaomi MiMo, OpenRouter, xAI, and more — plus local endpoints (Ollama,
|
|
139
|
+
LM Studio, vLLM) for fully offline use.
|
|
140
|
+
- **[Deeply extensible](https://alysiscode.com/docs/concepts/plugins)** — skills, custom tools, MCP
|
|
141
|
+
servers, hooks, subagents, and plugins, bundled in one declarative manifest.
|
|
142
|
+
- **[Sandboxed by default](https://alysiscode.com/docs/safety/sandbox-modes)** — Docker or Bubblewrap
|
|
143
|
+
isolation with an always-on denylist that refuses `rm -rf /`, `curl | sh`, and `sudo` — even in
|
|
144
|
+
`fullaccess`.
|
|
145
|
+
|
|
146
|
+
Shell and verification commands default to strict sandboxing. Verification can run outside that
|
|
147
|
+
sandbox only when explicitly configured with `verify_sandbox.mode="off"` or
|
|
148
|
+
`ALYSIS_VERIFY_SANDBOX_MODE=off`.
|
|
149
|
+
|
|
150
|
+
## Modes & Personas
|
|
151
|
+
|
|
152
|
+
Two layers control what the agent may do — one enforces, one focuses.
|
|
153
|
+
|
|
154
|
+
**Execution modes** are the enforcement layer. Choose one per command with `--mode`, switch in chat
|
|
155
|
+
with `/mode`, or set a default with `alysis-code config set default_mode <mode>`:
|
|
156
|
+
|
|
157
|
+
| Mode | Behavior |
|
|
158
|
+
| --- | --- |
|
|
159
|
+
| `readonly` | Inspection only — no file writes, shell, MCP, or subagent delegation. |
|
|
160
|
+
| `review` | The safe default — previews and asks before every write and shell command. |
|
|
161
|
+
| `auto` | Applies routine edits with fewer prompts; dangerous operations stay blocked. |
|
|
162
|
+
| `fullaccess` | No mode-level prompts for trusted workspaces — the denylist and audit log stay active. |
|
|
163
|
+
|
|
164
|
+
**Personas** are working postures layered on top. Switch with `/persona`, or cycle with **Tab** in
|
|
165
|
+
the TUI:
|
|
166
|
+
|
|
167
|
+
| Persona | Posture |
|
|
168
|
+
| --- | --- |
|
|
169
|
+
| `code` | Implementation — the default, full coding workflow. |
|
|
170
|
+
| `architect` | Planning and design — may write markdown documents only. |
|
|
171
|
+
| `ask` | Read-only questions and codebase exploration. |
|
|
172
|
+
| `debug` | Reproduce the failure first, then fix minimally and rerun the reproduction. |
|
|
173
|
+
|
|
174
|
+
A persona is a convention, never a permission: it can keep or lower your execution mode, but can
|
|
175
|
+
never raise it. Define your own in `.alysis_personas/*.md`.
|
|
176
|
+
[Learn more](https://alysiscode.com/docs/concepts/personas)
|
|
177
|
+
|
|
178
|
+
## Project Links
|
|
179
|
+
|
|
180
|
+
- [Website](https://alysiscode.com/)
|
|
181
|
+
- [Documentation](https://alysiscode.com/docs) — also mirrored in [docs/](docs/README.md)
|
|
182
|
+
- [Changelog](docs/CHANGELOG.md)
|
|
183
|
+
- [Contributing](.github/CONTRIBUTING.md) — local setup and PR expectations
|
|
184
|
+
- [Security policy](.github/SECURITY.md) — report vulnerabilities privately, never through public issues
|
|
185
|
+
|
|
186
|
+
## License
|
|
187
|
+
|
|
188
|
+
Apache-2.0. You're free to use, modify, and distribute this code, including commercially, as long as
|
|
189
|
+
you keep the attribution and license notices. See [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
|
190
|
+
|
|
191
|
+
## FAQ
|
|
192
|
+
|
|
193
|
+
<details>
|
|
194
|
+
<summary><b>Where did Alysis Code come from?</b></summary>
|
|
195
|
+
|
|
196
|
+
Alysis Code is not a fork. The agent runtime, Forge orchestration, subagent system, terminal
|
|
197
|
+
interface, and sandbox layer were designed and built from zero by the Alysis AI team.
|
|
198
|
+
</details>
|
|
199
|
+
|
|
200
|
+
<details>
|
|
201
|
+
<summary><b>Is Alysis Code really open source?</b></summary>
|
|
202
|
+
|
|
203
|
+
Yes. The entire CLI is Apache-2.0 licensed. Bring your own API key from any supported provider, or
|
|
204
|
+
run fully offline against a local endpoint — nothing in the agent requires a paid account.
|
|
205
|
+
</details>
|
|
206
|
+
|
|
207
|
+
More questions? See the [full FAQ](https://alysiscode.com/docs/faq).
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
**Join the community** — [X](https://x.com/alysiscode) | [GitHub Issues](../../issues)
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/banner-dark.svg">
|
|
4
|
+
<img src="docs/assets/banner.svg" alt="Alysis Code — Everyone's Coding Agent" width="720">
|
|
5
|
+
</picture>
|
|
6
|
+
</p>
|
|
7
|
+
|
|
8
|
+
<p align="center">
|
|
9
|
+
Local CLI coding agent that turns plans into reviewed, PR-ready code.<br>
|
|
10
|
+
Bring your own model. Sandboxed by default.
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://alysiscode.com/">Website</a> ·
|
|
15
|
+
<a href="https://github.com/AlysisAi/alysis-code/tree/main/docs">Docs</a> ·
|
|
16
|
+
<a href="https://github.com/AlysisAi/alysis-code/blob/main/docs/CHANGELOG.md">Changelog</a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<a href="https://github.com/sponsors/AlysisAi"><img src="https://img.shields.io/github/sponsors/AlysisAi?label=Sponsor&logo=GitHub" alt="GitHub Sponsors"></a>
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
<p align="center">
|
|
24
|
+
<a href="https://github.com/AlysisAi/alysis-code/actions/workflows/ci.yml"><img src="https://github.com/AlysisAi/alysis-code/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
25
|
+
<a href="https://pypi.org/project/alysis-code/"><img src="https://img.shields.io/pypi/v/alysis-code.svg" alt="PyPI version"></a>
|
|
26
|
+
<a href="https://pypi.org/project/alysis-code/"><img src="https://img.shields.io/pypi/pyversions/alysis-code.svg" alt="Python versions"></a>
|
|
27
|
+
<a href="https://github.com/AlysisAi/alysis-code/blob/main/LICENSE"><img src="https://img.shields.io/pypi/l/alysis-code.svg" alt="License"></a>
|
|
28
|
+
</p>
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Get Started
|
|
33
|
+
|
|
34
|
+
Alysis Code requires **Python 3.11+** and runs on macOS, Linux, and Windows.
|
|
35
|
+
|
|
36
|
+
**1 — Install**
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pipx install alysis-code
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**2 — Launch in your project**
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
cd your-project
|
|
46
|
+
alysis-code
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The first run opens a guided setup wizard: choose **Use an API key** or **Use an AI subscription**,
|
|
50
|
+
connect a provider, and pick your default model. Re-run it anytime with `alysis-code setup`.
|
|
51
|
+
(`alysis` works too, as a short alias.)
|
|
52
|
+
|
|
53
|
+
**3 — Start building**
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
alysis-code chat # interactive coding session
|
|
57
|
+
alysis-code run "Fix the failing tests" # one-shot task
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Bring your own key from any supported provider — or point Alysis Code at a local endpoint (Ollama,
|
|
61
|
+
LM Studio, vLLM) and run fully offline. The `/config` picker lists every preset. Full walkthrough:
|
|
62
|
+
[Quickstart guide](docs/quickstart.md).
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Why Alysis Code
|
|
67
|
+
|
|
68
|
+
- **Easy to use** — a full coding agent behind a clean, convenient terminal interface that anyone can
|
|
69
|
+
pick up and play with in minutes: slash commands, interactive pickers, and live status built in.
|
|
70
|
+
- **Built for every developer** — from solo scripts to team servers and CI, the same agent fits every
|
|
71
|
+
workflow.
|
|
72
|
+
- **[Forge Mode](https://alysiscode.com/docs/concepts/tasks)** — plan-driven execution for larger work:
|
|
73
|
+
plan, dispatch parallel workers, verify each task, ship PR-ready code.
|
|
74
|
+
- **[Orchestrated subagents](https://alysiscode.com/docs/concepts/agents)** — isolated workers run in
|
|
75
|
+
parallel, verification is pinned to their exact candidates, and changes apply only after host-side
|
|
76
|
+
conflict checks.
|
|
77
|
+
- **Free built-in web search** — model-independent `web_search` that works with any provider, at no
|
|
78
|
+
extra cost.
|
|
79
|
+
- **[Bring your own model](https://alysiscode.com/docs/config/models)** — OpenAI, Anthropic, DeepSeek,
|
|
80
|
+
Qwen, Gemini, Mistral, Xiaomi MiMo, OpenRouter, xAI, and more — plus local endpoints (Ollama,
|
|
81
|
+
LM Studio, vLLM) for fully offline use.
|
|
82
|
+
- **[Deeply extensible](https://alysiscode.com/docs/concepts/plugins)** — skills, custom tools, MCP
|
|
83
|
+
servers, hooks, subagents, and plugins, bundled in one declarative manifest.
|
|
84
|
+
- **[Sandboxed by default](https://alysiscode.com/docs/safety/sandbox-modes)** — Docker or Bubblewrap
|
|
85
|
+
isolation with an always-on denylist that refuses `rm -rf /`, `curl | sh`, and `sudo` — even in
|
|
86
|
+
`fullaccess`.
|
|
87
|
+
|
|
88
|
+
Shell and verification commands default to strict sandboxing. Verification can run outside that
|
|
89
|
+
sandbox only when explicitly configured with `verify_sandbox.mode="off"` or
|
|
90
|
+
`ALYSIS_VERIFY_SANDBOX_MODE=off`.
|
|
91
|
+
|
|
92
|
+
## Modes & Personas
|
|
93
|
+
|
|
94
|
+
Two layers control what the agent may do — one enforces, one focuses.
|
|
95
|
+
|
|
96
|
+
**Execution modes** are the enforcement layer. Choose one per command with `--mode`, switch in chat
|
|
97
|
+
with `/mode`, or set a default with `alysis-code config set default_mode <mode>`:
|
|
98
|
+
|
|
99
|
+
| Mode | Behavior |
|
|
100
|
+
| --- | --- |
|
|
101
|
+
| `readonly` | Inspection only — no file writes, shell, MCP, or subagent delegation. |
|
|
102
|
+
| `review` | The safe default — previews and asks before every write and shell command. |
|
|
103
|
+
| `auto` | Applies routine edits with fewer prompts; dangerous operations stay blocked. |
|
|
104
|
+
| `fullaccess` | No mode-level prompts for trusted workspaces — the denylist and audit log stay active. |
|
|
105
|
+
|
|
106
|
+
**Personas** are working postures layered on top. Switch with `/persona`, or cycle with **Tab** in
|
|
107
|
+
the TUI:
|
|
108
|
+
|
|
109
|
+
| Persona | Posture |
|
|
110
|
+
| --- | --- |
|
|
111
|
+
| `code` | Implementation — the default, full coding workflow. |
|
|
112
|
+
| `architect` | Planning and design — may write markdown documents only. |
|
|
113
|
+
| `ask` | Read-only questions and codebase exploration. |
|
|
114
|
+
| `debug` | Reproduce the failure first, then fix minimally and rerun the reproduction. |
|
|
115
|
+
|
|
116
|
+
A persona is a convention, never a permission: it can keep or lower your execution mode, but can
|
|
117
|
+
never raise it. Define your own in `.alysis_personas/*.md`.
|
|
118
|
+
[Learn more](https://alysiscode.com/docs/concepts/personas)
|
|
119
|
+
|
|
120
|
+
## Project Links
|
|
121
|
+
|
|
122
|
+
- [Website](https://alysiscode.com/)
|
|
123
|
+
- [Documentation](https://alysiscode.com/docs) — also mirrored in [docs/](docs/README.md)
|
|
124
|
+
- [Changelog](docs/CHANGELOG.md)
|
|
125
|
+
- [Contributing](.github/CONTRIBUTING.md) — local setup and PR expectations
|
|
126
|
+
- [Security policy](.github/SECURITY.md) — report vulnerabilities privately, never through public issues
|
|
127
|
+
|
|
128
|
+
## License
|
|
129
|
+
|
|
130
|
+
Apache-2.0. You're free to use, modify, and distribute this code, including commercially, as long as
|
|
131
|
+
you keep the attribution and license notices. See [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
|
132
|
+
|
|
133
|
+
## FAQ
|
|
134
|
+
|
|
135
|
+
<details>
|
|
136
|
+
<summary><b>Where did Alysis Code come from?</b></summary>
|
|
137
|
+
|
|
138
|
+
Alysis Code is not a fork. The agent runtime, Forge orchestration, subagent system, terminal
|
|
139
|
+
interface, and sandbox layer were designed and built from zero by the Alysis AI team.
|
|
140
|
+
</details>
|
|
141
|
+
|
|
142
|
+
<details>
|
|
143
|
+
<summary><b>Is Alysis Code really open source?</b></summary>
|
|
144
|
+
|
|
145
|
+
Yes. The entire CLI is Apache-2.0 licensed. Bring your own API key from any supported provider, or
|
|
146
|
+
run fully offline against a local endpoint — nothing in the agent requires a paid account.
|
|
147
|
+
</details>
|
|
148
|
+
|
|
149
|
+
More questions? See the [full FAQ](https://alysiscode.com/docs/faq).
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
**Join the community** — [X](https://x.com/alysiscode) | [GitHub Issues](../../issues)
|
|
@@ -11,7 +11,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
11
11
|
- **Renamed from Sylliptor to Alysis Code.** The command is now `alysis`, the
|
|
12
12
|
PyPI package is `alysis-code`, the Python module is `alysis_code`, the
|
|
13
13
|
environment prefix is `ALYSIS_`, and the per-repo directory is `.alysis/`.
|
|
14
|
-
See [docs/migration-alysis-code.md](
|
|
14
|
+
See [docs/migration-alysis-code.md](migration-alysis-code.md).
|
|
15
15
|
|
|
16
16
|
Existing installs keep working. Config and credential directories are copied
|
|
17
17
|
to their new locations on first run; the MCP OAuth keyring entry and any
|
|
@@ -408,6 +408,52 @@ 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.3] - 2026-08-28
|
|
412
|
+
|
|
413
|
+
### Fixed
|
|
414
|
+
|
|
415
|
+
- Restored the Ubuntu Python 3.11 and 3.12 CI jobs after the repository cleanup by aligning Ruff
|
|
416
|
+
formatting, updating moved sandbox contract paths, preserving the security-documentation
|
|
417
|
+
contract, making immediate shell-output coverage independent of thread scheduling, and allowing
|
|
418
|
+
harmless floating-point clock precision in deadline coverage.
|
|
419
|
+
|
|
420
|
+
## [0.13.2] - 2026-08-28
|
|
421
|
+
|
|
422
|
+
Public launch and repository-layout refresh.
|
|
423
|
+
|
|
424
|
+
### Added
|
|
425
|
+
|
|
426
|
+
- A theme-adaptive README banner with dedicated light and dark artwork.
|
|
427
|
+
- `alysis-code` as the canonical executable, while retaining `alysis` as the short alias.
|
|
428
|
+
|
|
429
|
+
### Changed
|
|
430
|
+
|
|
431
|
+
- Simplified the public README around installation, core capabilities, modes, and documentation.
|
|
432
|
+
- Moved governance files under `.github/`, release and changelog documents under `docs/`, and
|
|
433
|
+
sandbox and benchmark sources under `scripts/` for a cleaner repository root.
|
|
434
|
+
- Legacy Sylliptor environment and command compatibility now forwards silently while retaining
|
|
435
|
+
diagnostic logging for support.
|
|
436
|
+
|
|
437
|
+
### Fixed
|
|
438
|
+
|
|
439
|
+
- Device-login approval URLs now remain pinned to the configured Alysis site instead of trusting
|
|
440
|
+
a backend-provided origin.
|
|
441
|
+
|
|
442
|
+
## [0.13.1] - 2026-08-27
|
|
443
|
+
|
|
444
|
+
Input usability and runtime reliability improvements.
|
|
445
|
+
|
|
446
|
+
### Fixed
|
|
447
|
+
|
|
448
|
+
- The TUI now keeps input geometry, selection editing, paste-token hints,
|
|
449
|
+
dragged-selection scrolling, and terminal-theme styling consistent across
|
|
450
|
+
chat, configuration, setup, and workspace-guard surfaces.
|
|
451
|
+
- Intentional clean stops now exit successfully and retain a machine-readable
|
|
452
|
+
`stop_reason`; genuine failures and unknown stop reasons remain non-zero.
|
|
453
|
+
- Connections dropped mid-response receive a dedicated bounded retry schedule,
|
|
454
|
+
preserve caller-configured larger budgets, respect wall-clock caps, and emit
|
|
455
|
+
consistent retry, stream-restart, and terminal diagnostic reasons.
|
|
456
|
+
|
|
411
457
|
## [0.13.0] - 2026-08-22
|
|
412
458
|
|
|
413
459
|
The reliability wave. Six stacked fixes (PR1-PR6) targeting the failure modes
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "alysis-code"
|
|
7
|
-
version = "0.13.
|
|
7
|
+
version = "0.13.3"
|
|
8
8
|
description = "Local CLI coding agent powered by any API."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -51,11 +51,11 @@ dependencies = [
|
|
|
51
51
|
]
|
|
52
52
|
|
|
53
53
|
[project.urls]
|
|
54
|
-
Changelog = "https://github.com/AlysisAi/alysis-code/blob/main/CHANGELOG.md"
|
|
54
|
+
Changelog = "https://github.com/AlysisAi/alysis-code/blob/main/docs/CHANGELOG.md"
|
|
55
55
|
Documentation = "https://github.com/AlysisAi/alysis-code/tree/main/docs"
|
|
56
56
|
Funding = "https://github.com/sponsors/AlysisAi"
|
|
57
57
|
Issues = "https://github.com/AlysisAi/alysis-code/issues"
|
|
58
|
-
Security = "https://github.com/AlysisAi/alysis-code/blob/main/SECURITY.md"
|
|
58
|
+
Security = "https://github.com/AlysisAi/alysis-code/blob/main/.github/SECURITY.md"
|
|
59
59
|
Source = "https://github.com/AlysisAi/alysis-code"
|
|
60
60
|
|
|
61
61
|
[project.optional-dependencies]
|
|
@@ -77,10 +77,13 @@ server = [
|
|
|
77
77
|
]
|
|
78
78
|
|
|
79
79
|
[project.scripts]
|
|
80
|
+
# Canonical command.
|
|
81
|
+
alysis-code = "alysis_code.cli:app"
|
|
82
|
+
# Short alias.
|
|
80
83
|
alysis = "alysis_code.cli:app"
|
|
81
84
|
# Deprecated alias kept so muscle memory, shell aliases, CI scripts and IDE
|
|
82
|
-
# configs written against the old name keep working.
|
|
83
|
-
#
|
|
85
|
+
# configs written against the old name keep working. Forwards silently.
|
|
86
|
+
# Remove no earlier than the next major release.
|
|
84
87
|
sylliptor = "alysis_code.cli:legacy_app"
|
|
85
88
|
|
|
86
89
|
[tool.hatch.build.targets.wheel]
|
|
@@ -93,7 +96,7 @@ exclude = [
|
|
|
93
96
|
[tool.hatch.build.targets.sdist]
|
|
94
97
|
include = [
|
|
95
98
|
"/.gitignore",
|
|
96
|
-
"/CHANGELOG.md",
|
|
99
|
+
"/docs/CHANGELOG.md",
|
|
97
100
|
"/LICENSE",
|
|
98
101
|
"/NOTICE",
|
|
99
102
|
"/README.md",
|
|
@@ -26,6 +26,7 @@ import urllib.request
|
|
|
26
26
|
from collections.abc import Callable
|
|
27
27
|
from dataclasses import dataclass
|
|
28
28
|
from datetime import UTC, datetime
|
|
29
|
+
from urllib.parse import urlsplit
|
|
29
30
|
|
|
30
31
|
from . import alysis_cloud as cloud
|
|
31
32
|
from .config import (
|
|
@@ -302,6 +303,38 @@ def _http_error_message(exc: urllib.error.HTTPError) -> str:
|
|
|
302
303
|
return f"Login request failed (HTTP {exc.code})."
|
|
303
304
|
|
|
304
305
|
|
|
306
|
+
def _approval_url(server_url: str, *, user_code: str) -> str:
|
|
307
|
+
"""Build the /activate URL to open, pinning the host to the configured site.
|
|
308
|
+
|
|
309
|
+
The device endpoint returns its own ``verification_url`` /
|
|
310
|
+
``verification_url_complete``. Opening that verbatim lets the *server*
|
|
311
|
+
decide which website the CLI sends the user to — which is how a deployment
|
|
312
|
+
still carrying the pre-rebrand host (``sylliptor.alysisai.com``) kept
|
|
313
|
+
launching the retired site long after the client had been rebranded, and
|
|
314
|
+
which would equally let a compromised or misconfigured backend point
|
|
315
|
+
sign-in anywhere. Only the path and query are taken from the response; the
|
|
316
|
+
origin always comes from ``alysis_cloud.site_url()`` (env-overridable via
|
|
317
|
+
ALYSIS_SITE_URL for staging/local stubs), so the host the user lands on is
|
|
318
|
+
the one this client trusts.
|
|
319
|
+
"""
|
|
320
|
+
base = cloud.site_url()
|
|
321
|
+
path = "/activate"
|
|
322
|
+
query = f"code={user_code}" if user_code else ""
|
|
323
|
+
|
|
324
|
+
if server_url:
|
|
325
|
+
try:
|
|
326
|
+
parts = urlsplit(server_url)
|
|
327
|
+
except ValueError:
|
|
328
|
+
parts = None
|
|
329
|
+
if parts is not None:
|
|
330
|
+
if parts.path:
|
|
331
|
+
path = parts.path if parts.path.startswith("/") else f"/{parts.path}"
|
|
332
|
+
if parts.query:
|
|
333
|
+
query = parts.query
|
|
334
|
+
|
|
335
|
+
return f"{base}{path}?{query}" if query else f"{base}{path}"
|
|
336
|
+
|
|
337
|
+
|
|
305
338
|
def _request_device_code() -> _DeviceGrant:
|
|
306
339
|
client_name = f"alysis-cli @ {platform.node() or 'unknown-host'}"[:80]
|
|
307
340
|
body = _post_json(cloud.device_code_url(), {"client_name": client_name})
|
|
@@ -311,11 +344,10 @@ def _request_device_code() -> _DeviceGrant:
|
|
|
311
344
|
if not device_code or not user_code:
|
|
312
345
|
raise AlysisLoginError("Login service did not return a device code.")
|
|
313
346
|
|
|
314
|
-
verification_url =
|
|
315
|
-
body.get("verification_url_complete") or body.get("verification_url") or ""
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
verification_url = f"{cloud.activate_url()}?code={user_code}"
|
|
347
|
+
verification_url = _approval_url(
|
|
348
|
+
str(body.get("verification_url_complete") or body.get("verification_url") or "").strip(),
|
|
349
|
+
user_code=user_code,
|
|
350
|
+
)
|
|
319
351
|
|
|
320
352
|
try:
|
|
321
353
|
interval_s = max(float(body.get("interval", _DEFAULT_POLL_INTERVAL_S)), 0.0)
|
|
@@ -21,6 +21,7 @@ from ...budget_policy import (
|
|
|
21
21
|
STOP_REASON_RUN_BUDGET_EXHAUSTED,
|
|
22
22
|
ProgressCheckpoint,
|
|
23
23
|
exit_code_for_stop,
|
|
24
|
+
is_clean_stop,
|
|
24
25
|
resolve_budget_grace_seconds,
|
|
25
26
|
)
|
|
26
27
|
from ...edit_discipline import scratch_summary_line
|
|
@@ -3055,13 +3056,26 @@ def run_turn(
|
|
|
3055
3056
|
)
|
|
3056
3057
|
material_work_persisted = bool(salvaged_paths or durable_service_ids)
|
|
3057
3058
|
missing_action = _outstanding_turn_action()
|
|
3058
|
-
|
|
3059
|
+
# A stop the run chose for itself is an outcome, not a failure, whether
|
|
3060
|
+
# or not it had anything to show for itself -- exiting non-zero made
|
|
3061
|
+
# automation interpret an intentional stop as a process failure.
|
|
3062
|
+
# Every other degraded stop keeps the "exit 0 only when work persisted"
|
|
3063
|
+
# rule, because there the run did not decide anything: it was stopped.
|
|
3064
|
+
clean_stop = is_clean_stop(trigger)
|
|
3065
|
+
if clean_stop:
|
|
3066
|
+
exit_code = exit_code_for_stop(trigger)
|
|
3067
|
+
# Surfaces in the run_finished crash event, so callers can name
|
|
3068
|
+
# the stop without parsing the summary prose.
|
|
3069
|
+
self.stop_reason = trigger
|
|
3070
|
+
else:
|
|
3071
|
+
exit_code = 0 if material_work_persisted else 1
|
|
3059
3072
|
degraded_payload = {
|
|
3060
3073
|
"step": step,
|
|
3061
3074
|
"runtime_kind": self.runtime_kind.value,
|
|
3062
3075
|
"reason": reason,
|
|
3063
3076
|
"trigger": trigger,
|
|
3064
3077
|
"exit_code": exit_code,
|
|
3078
|
+
**({"stop_reason": trigger} if clean_stop else {}),
|
|
3065
3079
|
"material_work_persisted": material_work_persisted,
|
|
3066
3080
|
"salvaged_paths": salvaged_paths,
|
|
3067
3081
|
"durable_service_ids": durable_service_ids,
|
|
@@ -3200,6 +3214,9 @@ def run_turn(
|
|
|
3200
3214
|
**_controller_intervention_event_fields(),
|
|
3201
3215
|
"degraded": True,
|
|
3202
3216
|
"degraded_reason": "empty_response_stall",
|
|
3217
|
+
# Present only for a self-stop, so an ordinary degraded stop's
|
|
3218
|
+
# event stays byte-identical to before.
|
|
3219
|
+
**({"stop_reason": trigger} if is_clean_stop(trigger) else {}),
|
|
3203
3220
|
},
|
|
3204
3221
|
)
|
|
3205
3222
|
assistant_message_emitted = True
|
|
@@ -6923,10 +6940,21 @@ def run_turn(
|
|
|
6923
6940
|
explicit_language_override=turn_language_explicit,
|
|
6924
6941
|
prior_visible_text=last_visible_assistant_text,
|
|
6925
6942
|
streamed_text_emitted=streamed_text_emitted,
|
|
6926
|
-
final_event_payload=
|
|
6943
|
+
final_event_payload={
|
|
6944
|
+
**_controller_intervention_event_fields(),
|
|
6945
|
+
**({"stop_reason": reason} if is_clean_stop(reason) else {}),
|
|
6946
|
+
},
|
|
6927
6947
|
)
|
|
6928
6948
|
assistant_message_emitted = True
|
|
6929
|
-
|
|
6949
|
+
if is_clean_stop(reason):
|
|
6950
|
+
self.stop_reason = reason
|
|
6951
|
+
# Reached only when the shared stall resolution is disabled, so
|
|
6952
|
+
# it is the same self-stop as the salvage path above and has to
|
|
6953
|
+
# exit the same way. The decision goes through the stop-reason
|
|
6954
|
+
# table rather than a literal, so both paths stay in step.
|
|
6955
|
+
return _finish_turn(
|
|
6956
|
+
exit_code_for_stop(reason), reason=reason, final_text=local_summary
|
|
6957
|
+
)
|
|
6930
6958
|
|
|
6931
6959
|
empty_response_anomaly_state.attempts = next_anomaly_attempt
|
|
6932
6960
|
empty_response_anomaly_state.last_missing_action = missing_action
|