alysis-code 0.13.1__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.1 → alysis_code-0.13.3/docs}/CHANGELOG.md +32 -1
- {alysis_code-0.13.1 → alysis_code-0.13.3}/pyproject.toml +9 -6
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/__init__.py +1 -1
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/account_login.py +37 -5
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/branding.py +12 -30
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli.py +4 -9
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/updates.py +10 -9
- alysis_code-0.13.1/PKG-INFO +0 -507
- alysis_code-0.13.1/README.md +0 -449
- {alysis_code-0.13.1 → alysis_code-0.13.3}/.gitignore +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/LICENSE +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/NOTICE +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/__main__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/_build_info.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/README.md +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/acceptance_contract.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/blast_radius.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/cache_keepalive.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/completion_certificate.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/completion_gate.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/empty_response_stall.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/errors.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/llm_calls.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/mutation_classification.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/prompt_context.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/read_ledger.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/regression_baseline.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/reproduction_first.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/sensitive_output.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/session.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/steering.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/subagent_execution.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/subagent_workspace.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/tools_assembly.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/turn/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/turn/core.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/turn/events.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/turn/exploration.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/turn/interventions.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/turn/read_cache.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/turn/snapshot.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/turn_contract.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/turn_path.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/verification.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/verification_commands.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent/verification_evidence.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent_loop.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/base.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/builtins.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/codex_cli.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/host.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/registry.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agent_runtimes/service.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agentbox_client.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/agentbox_integration.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/alysis_cloud.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/approval_scope.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/README.md +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/asset_read_core.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/budget_allocator.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/comprehender.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/index.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/ingestion.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/legacy_migration.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/models.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/ocr.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-000.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-001.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-002.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-003.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-004.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-005.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-006.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-007.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-008.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-009.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-010.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-011.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-012.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-013.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-014.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-015.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-016.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-017.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-018.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-019.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/ascii/f-020.txt +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/index.html +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/owl/show-owl.sh +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/paths.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/plan_binding.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/planner_context.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/planner_tools.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/prompts.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/replanner_context.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/surface.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/untrusted_content.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/usage_logger.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/worker_mirror.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/worker_section.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/assets/worker_tools.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/atomic_io.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/auth_diagnostics.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/background_runner.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/budget_policy.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/build_identity.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/builtin_hooks/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/builtin_hooks/notify_done_windows.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/bwrap_etc.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cancellation.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/capabilities.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/chatgpt_codex_static_provider.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/assets_cli.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/assets_modal.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat/commands.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat/loop.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat/mid_turn_policy.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat/rendering.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat/state.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat_resume.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/chat_slash_completer.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/_shared.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/auth.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/chat_resume_helpers.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/chat_state.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/chat_status.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/chat_terminal.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/chat_tui_panels.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/cli_common.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/cli_surface.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/config.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/conventions.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/execution_helpers.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/extensions.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/forge.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/forge_asset_view.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/forge_helpers.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/hooks.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/ide_bridge.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/mcp.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/profile.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/prompt_helpers.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/report.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/root.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/sandbox.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/server.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/sessions.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/skills.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/startup.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/tools.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/update.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/commands/welcome.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/config_menu.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/forge.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/forge_recovery.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/setup_wizard.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/app.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/config.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/config_flow.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/config_overlay.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/content.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/footer.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/forge_status.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/markdown.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/owl.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/plan_meta.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/selection_bindings.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/setup_app.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/setup_flow.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/state.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/subagent_identity.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/subagent_panel.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/surface.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/transcript.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/update_prompt.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/cli_impl/tui/workspace_guard.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/clipboard.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/code_review.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/compaction/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/compaction/conversation_compactor.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/compaction/importance.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/compaction/settings.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/compaction/tool_output_offload.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/config.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/conflict_auto_resolver.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/context/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/context/tool_schema_budgeter.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/crash_diagnostics.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/custom_tools/README.md +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/custom_tools/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/custom_tools/discovery.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/custom_tools/runtime.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/custom_tools/session.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/custom_tools/trust.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/diff_paths.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/direction_change.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/dispatch_timing.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/durable_service_manager.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/edit_discipline.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/error_text.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/execution_budget.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/execution_context.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/execution_deadline.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/execution_shared.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/extensions/README.md +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/extensions/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/extensions/activation.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/extensions/install.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/extensions/manifest.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/extensions/models.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/extensions/paths.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/extensions/registry.json +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/extensions/registry.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/extensions/state.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/extensions/workspace_trust.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/failed_task_evidence.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/failure_category.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/feedback_report.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/file_classification.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/forge.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/forge_completion.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/forge_events.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/frontmatter_utils.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/git_evidence.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/git_ops.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/git_safe.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/git_worktrees.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/hooks/README.md +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/hooks/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/hooks/audit.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/hooks/config.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/hooks/dispatcher.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/hooks/models.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/hooks/trust.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/host_actions.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/host_browser.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/activity_events.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/approvals.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/artifacts.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/browser_egress_proxy.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/cdp_websocket_transport.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/change_ledger.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/context_blocks.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/event_stream.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/forge_protocol.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/forge_request_ledger.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/health.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/managed_browser.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/management_protocol.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/mcp_oauth_coordinator.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/mcp_oauth_lifecycle.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/prompt_queue.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/protocol.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/resumable_swarm.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/session_search.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/stdio_bridge.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/structured_state.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/ide/swarm_protocol.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/integration_gate.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/interactive_input_guard.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/interactive_plan_mode.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/internal_artifacts.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/knowledge_base.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/knowledge_capture.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/knowledge_librarian.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/language_policy.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/litellm_static_provider.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/anthropic_messages.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/base.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/cache_capabilities.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/cache_control_blocks.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/cache_policy.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/factory.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/gemini_generate_content.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/gemini_interactions.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/metadata.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/openai_compat.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/openai_responses.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/protocols.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/provider_limits.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/request_plan.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/request_shape.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/streaming.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/temperature_compat.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/types.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm/usage_normalization.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/llm_error_display.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/logging_redaction.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/managed_host_deadline.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/README.md +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/client.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/config.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/errors.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/forge_scope.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/jsonrpc.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/manager.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/models.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/oauth.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/oauth_runtime.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/oauth_store.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/prompts.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/resources.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/roots.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/server_requests.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/token_store.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/transport_http.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/transport_stdio.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/mcp/untrusted_content.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/merge_conflict_reviewer.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/model_catalog/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/model_catalog/chatgpt_codex_subscription_snapshot.json +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.json +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.meta.json +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/model_metadata_policy.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/model_metadata_utils.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/model_registry.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/model_router.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/permission_policy.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/personas.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/pipeline_facts.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/plan_assistant.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/plan_mode.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/plan_reconciliation.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/plan_repair.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/plan_validation.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/planning_constraints.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/policy.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/preview_server.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/process_reaping.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/profile_presets.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/profiles.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/provider_auth/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/provider_auth/base.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/provider_auth/openai_codex.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/provider_auth/registry.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/provider_auth/store.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/provider_diagnostics.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/provider_model_catalog.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/provider_telemetry.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/provider_url.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/reasoning_contracts.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/remote_sync.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/replanning.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/repo_scan.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/request_estimation.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/review_gate.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/run_lock.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/run_outcome.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/run_provenance.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/run_state.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/runtime_artifacts.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/runtime_context_features.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/runtime_kind.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/safety/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/safety/mcp_sanitize.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/safety/safe_http.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/safety/subagent_report.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/sandbox_doctor.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/sandbox_runner.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/sandbox_settings.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/serialized_paths.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/server/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/server/app.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/server/auth.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/server/job_config.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/server/settings.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/server/store.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/server/worker_runner.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/service_persistence.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/session_artifacts.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/session_metrics.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/session_store.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/README.md +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/conventions.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/discovery.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/eval_models.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/eval_runner.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/evals.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/install.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/loader.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/matching.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/models.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/paths.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/prompting.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/scaffold.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/state.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/transactions.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/skills/validation.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/step_budget.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/subagent_labels.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/subagents.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/surface/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/surface/base.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/surface/console.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/surface/events.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/surface/hidden_surface.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/surface/noop_surface.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/surface/rich_surface.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/surface/styles.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/surface/theme.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/surface/types.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/swarm_backend.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/swarm_orchestrator.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/swarm_scheduler.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/swarm_trace.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/swarm_worker.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/swarm_write_guard.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/task_dependencies.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/task_readiness.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/task_scope.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/terminal_manager.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/terminal_ownership.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/text_normalization.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/token_budget.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/README.md +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/__init__.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/artifacts.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/availability.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/fs.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/git.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/history.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/http_timeout.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/image_generation.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/registry.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/repo_map.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/search.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/shell.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/symbols.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/test_discovery.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/web.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/web_search.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/web_search_dashscope.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/web_search_ddgs.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/web_search_provider_adapters.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/tools/web_search_tavily.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/transport_retry.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/usage_tracker.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/verification_command_analysis.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/verification_contract.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/verification_failure_summary.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/verification_repair.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/verify_gate.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/web_research.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/web_search_adapters.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/web_search_policy.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/workspace_binding.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/workspace_binding_ui.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/workspace_context.py +0 -0
- {alysis_code-0.13.1 → alysis_code-0.13.3}/src/alysis_code/workspace_isolation.py +0 -0
- {alysis_code-0.13.1 → 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,37 @@ 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
|
+
|
|
411
442
|
## [0.13.1] - 2026-08-27
|
|
412
443
|
|
|
413
444
|
Input usability and runtime reliability improvements.
|
|
@@ -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)
|
|
@@ -4,7 +4,10 @@ The CLI shipped as "Sylliptor" (package ``sylliptor-agent-cli``, command
|
|
|
4
4
|
``sylliptor``, env prefix ``SYLLIPTOR_``) before being renamed to Alysis Code.
|
|
5
5
|
Everything a user could have written down — env vars in a CI config, a
|
|
6
6
|
``.sylliptor/`` directory committed to their repo, a keyring entry holding MCP
|
|
7
|
-
OAuth tokens — still resolves
|
|
7
|
+
OAuth tokens — still resolves. The fallbacks are deliberately *silent*: they
|
|
8
|
+
are a courtesy to people who already migrated once, not something to announce
|
|
9
|
+
above the TUI on every launch. Each one is recorded to the log at warning level
|
|
10
|
+
so a support session can still see which legacy input was used. See
|
|
8
11
|
``docs/migration-alysis-code.md`` for the removal timeline.
|
|
9
12
|
"""
|
|
10
13
|
|
|
@@ -14,7 +17,6 @@ import logging
|
|
|
14
17
|
import os
|
|
15
18
|
import shutil
|
|
16
19
|
import threading
|
|
17
|
-
import warnings
|
|
18
20
|
from collections.abc import Mapping
|
|
19
21
|
from importlib import metadata as importlib_metadata
|
|
20
22
|
from pathlib import Path
|
|
@@ -49,8 +51,6 @@ MIGRATION_MARKER_NAME = ".migrated-to-alysis"
|
|
|
49
51
|
|
|
50
52
|
_notice_lock = threading.Lock()
|
|
51
53
|
_legacy_env_seen: dict[str, str] = {}
|
|
52
|
-
_migrated_paths: dict[str, str] = {}
|
|
53
|
-
_legacy_paths_in_use: dict[str, str] = {}
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
def legacy_env_name(name: str) -> str | None:
|
|
@@ -61,15 +61,12 @@ def legacy_env_name(name: str) -> str | None:
|
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
def _record_legacy_env(legacy: str, current: str) -> None:
|
|
64
|
+
"""Log a legacy variable read, once per variable, without warning the user."""
|
|
64
65
|
with _notice_lock:
|
|
65
66
|
if legacy in _legacy_env_seen:
|
|
66
67
|
return
|
|
67
68
|
_legacy_env_seen[legacy] = current
|
|
68
|
-
message = (
|
|
69
|
-
f"{legacy} is deprecated and will be removed in a future release; rename it to {current}."
|
|
70
|
-
)
|
|
71
69
|
LOGGER.warning("legacy_env_var legacy=%s current=%s", legacy, current)
|
|
72
|
-
warnings.warn(message, DeprecationWarning, stacklevel=3)
|
|
73
70
|
|
|
74
71
|
|
|
75
72
|
def env_get(name: str, default: str | None = None) -> str | None:
|
|
@@ -121,26 +118,14 @@ def with_legacy_env_aliases(env: Mapping[str, str]) -> dict[str, str]:
|
|
|
121
118
|
return merged
|
|
122
119
|
|
|
123
120
|
|
|
124
|
-
def
|
|
125
|
-
"""
|
|
121
|
+
def reset_legacy_tracking() -> None:
|
|
122
|
+
"""Forget which legacy inputs have been seen, so logging repeats.
|
|
123
|
+
|
|
124
|
+
Only the per-process de-duplication state; nothing user-visible depends on
|
|
125
|
+
it. Tests use it to isolate cases that each expect a fresh log line.
|
|
126
|
+
"""
|
|
126
127
|
with _notice_lock:
|
|
127
|
-
env_items = sorted(_legacy_env_seen.items())
|
|
128
|
-
migrated = sorted(_migrated_paths.items())
|
|
129
|
-
in_use = sorted(_legacy_paths_in_use.items())
|
|
130
128
|
_legacy_env_seen.clear()
|
|
131
|
-
_migrated_paths.clear()
|
|
132
|
-
_legacy_paths_in_use.clear()
|
|
133
|
-
|
|
134
|
-
notices = [
|
|
135
|
-
f"Environment variable {legacy} is deprecated — use {current}."
|
|
136
|
-
for legacy, current in env_items
|
|
137
|
-
]
|
|
138
|
-
notices.extend(f"Copied {legacy} to {current}." for legacy, current in migrated)
|
|
139
|
-
notices.extend(
|
|
140
|
-
f"Using legacy directory {legacy}; rename it to {current} when convenient."
|
|
141
|
-
for legacy, current in in_use
|
|
142
|
-
)
|
|
143
|
-
return notices
|
|
144
129
|
|
|
145
130
|
|
|
146
131
|
def _github_owner_from_url(url: str) -> str | None:
|
|
@@ -223,8 +208,6 @@ def _migrate_legacy_dir(current: Path, legacy: Path) -> Path:
|
|
|
223
208
|
# Marker is an optimisation; a missing one only costs a redundant check.
|
|
224
209
|
pass
|
|
225
210
|
|
|
226
|
-
with _notice_lock:
|
|
227
|
-
_migrated_paths.setdefault(str(legacy), str(current))
|
|
228
211
|
LOGGER.info("legacy_dir_migrated legacy=%s current=%s", legacy, current)
|
|
229
212
|
return current
|
|
230
213
|
|
|
@@ -259,8 +242,7 @@ def resolve_project_dir(root: Path) -> Path:
|
|
|
259
242
|
return current
|
|
260
243
|
legacy = root / LEGACY_PROJECT_DIR_NAME
|
|
261
244
|
if legacy.is_dir():
|
|
262
|
-
|
|
263
|
-
_legacy_paths_in_use.setdefault(str(legacy), str(current))
|
|
245
|
+
LOGGER.debug("legacy_project_dir_in_use legacy=%s current=%s", legacy, current)
|
|
264
246
|
return legacy
|
|
265
247
|
return current
|
|
266
248
|
|
|
@@ -34,16 +34,11 @@ from .cli_impl.commands.cli_surface import *
|
|
|
34
34
|
def legacy_app() -> None:
|
|
35
35
|
"""Entry point for the deprecated ``sylliptor`` command.
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
Forwards to ``alysis`` silently. The alias exists so muscle memory, shell
|
|
38
|
+
aliases, CI scripts and IDE configs written against the old name keep
|
|
39
|
+
working — announcing that on every launch only put a stray line above the
|
|
40
|
+
TUI. The removal timeline lives in ``docs/migration-alysis-code.md``.
|
|
39
41
|
"""
|
|
40
|
-
import sys as _sys
|
|
41
|
-
|
|
42
|
-
print(
|
|
43
|
-
"note: 'sylliptor' has been renamed to 'alysis'. This alias still works "
|
|
44
|
-
"but will be removed in a future release.",
|
|
45
|
-
file=_sys.stderr,
|
|
46
|
-
)
|
|
47
42
|
app()
|
|
48
43
|
|
|
49
44
|
|