alysis-code 0.13.6__tar.gz → 0.13.6.2__tar.gz

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