alysis-code 0.13.1__tar.gz → 0.13.4__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 (463) hide show
  1. alysis_code-0.13.4/PKG-INFO +211 -0
  2. alysis_code-0.13.4/README.md +153 -0
  3. {alysis_code-0.13.1 → alysis_code-0.13.4/docs}/CHANGELOG.md +61 -1
  4. {alysis_code-0.13.1 → alysis_code-0.13.4}/pyproject.toml +9 -6
  5. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/__init__.py +1 -1
  6. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/account_login.py +37 -5
  7. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/branding.py +12 -30
  8. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli.py +4 -9
  9. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/config_flow.py +82 -2
  10. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/content.py +21 -5
  11. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/gemini_generate_content.py +234 -2
  12. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/openai_compat.py +19 -1
  13. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/model_registry.py +888 -73
  14. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/profile_presets.py +442 -234
  15. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/reasoning_contracts.py +162 -20
  16. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/web_search.py +3 -2
  17. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/web_search_provider_adapters.py +83 -17
  18. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/updates.py +10 -9
  19. alysis_code-0.13.1/PKG-INFO +0 -507
  20. alysis_code-0.13.1/README.md +0 -449
  21. {alysis_code-0.13.1 → alysis_code-0.13.4}/.gitignore +0 -0
  22. {alysis_code-0.13.1 → alysis_code-0.13.4}/LICENSE +0 -0
  23. {alysis_code-0.13.1 → alysis_code-0.13.4}/NOTICE +0 -0
  24. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/__main__.py +0 -0
  25. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/_build_info.py +0 -0
  26. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/README.md +0 -0
  27. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/__init__.py +0 -0
  28. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/acceptance_contract.py +0 -0
  29. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/blast_radius.py +0 -0
  30. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/cache_keepalive.py +0 -0
  31. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/completion_certificate.py +0 -0
  32. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/completion_gate.py +0 -0
  33. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/empty_response_stall.py +0 -0
  34. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/errors.py +0 -0
  35. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/llm_calls.py +0 -0
  36. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/mutation_classification.py +0 -0
  37. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/prompt_context.py +0 -0
  38. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/read_ledger.py +0 -0
  39. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/regression_baseline.py +0 -0
  40. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/reproduction_first.py +0 -0
  41. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/sensitive_output.py +0 -0
  42. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/session.py +0 -0
  43. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/steering.py +0 -0
  44. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/subagent_execution.py +0 -0
  45. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/subagent_workspace.py +0 -0
  46. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/tools_assembly.py +0 -0
  47. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/turn/__init__.py +0 -0
  48. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/turn/core.py +0 -0
  49. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/turn/events.py +0 -0
  50. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/turn/exploration.py +0 -0
  51. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/turn/interventions.py +0 -0
  52. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/turn/read_cache.py +0 -0
  53. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/turn/snapshot.py +0 -0
  54. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/turn_contract.py +0 -0
  55. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/turn_path.py +0 -0
  56. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/verification.py +0 -0
  57. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/verification_commands.py +0 -0
  58. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent/verification_evidence.py +0 -0
  59. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent_loop.py +0 -0
  60. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent_runtimes/__init__.py +0 -0
  61. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent_runtimes/base.py +0 -0
  62. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent_runtimes/builtins.py +0 -0
  63. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent_runtimes/codex_cli.py +0 -0
  64. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent_runtimes/host.py +0 -0
  65. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent_runtimes/registry.py +0 -0
  66. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agent_runtimes/service.py +0 -0
  67. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agentbox_client.py +0 -0
  68. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/agentbox_integration.py +0 -0
  69. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/alysis_cloud.py +0 -0
  70. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/approval_scope.py +0 -0
  71. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/README.md +0 -0
  72. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/__init__.py +0 -0
  73. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/asset_read_core.py +0 -0
  74. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/budget_allocator.py +0 -0
  75. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/comprehender.py +0 -0
  76. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/index.py +0 -0
  77. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/ingestion.py +0 -0
  78. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/legacy_migration.py +0 -0
  79. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/models.py +0 -0
  80. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/ocr.py +0 -0
  81. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-000.txt +0 -0
  82. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-001.txt +0 -0
  83. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-002.txt +0 -0
  84. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-003.txt +0 -0
  85. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-004.txt +0 -0
  86. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-005.txt +0 -0
  87. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-006.txt +0 -0
  88. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-007.txt +0 -0
  89. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-008.txt +0 -0
  90. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-009.txt +0 -0
  91. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-010.txt +0 -0
  92. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-011.txt +0 -0
  93. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-012.txt +0 -0
  94. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-013.txt +0 -0
  95. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-014.txt +0 -0
  96. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-015.txt +0 -0
  97. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-016.txt +0 -0
  98. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-017.txt +0 -0
  99. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-018.txt +0 -0
  100. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-019.txt +0 -0
  101. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/ascii/f-020.txt +0 -0
  102. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/index.html +0 -0
  103. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/owl/show-owl.sh +0 -0
  104. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/paths.py +0 -0
  105. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/plan_binding.py +0 -0
  106. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/planner_context.py +0 -0
  107. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/planner_tools.py +0 -0
  108. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/prompts.py +0 -0
  109. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/replanner_context.py +0 -0
  110. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/surface.py +0 -0
  111. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/untrusted_content.py +0 -0
  112. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/usage_logger.py +0 -0
  113. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/worker_mirror.py +0 -0
  114. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/worker_section.py +0 -0
  115. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/assets/worker_tools.py +0 -0
  116. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/atomic_io.py +0 -0
  117. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/auth_diagnostics.py +0 -0
  118. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/background_runner.py +0 -0
  119. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/budget_policy.py +0 -0
  120. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/build_identity.py +0 -0
  121. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/builtin_hooks/__init__.py +0 -0
  122. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/builtin_hooks/notify_done_windows.py +0 -0
  123. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/bwrap_etc.py +0 -0
  124. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cancellation.py +0 -0
  125. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/capabilities.py +0 -0
  126. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/chatgpt_codex_static_provider.py +0 -0
  127. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/__init__.py +0 -0
  128. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/assets_cli.py +0 -0
  129. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/assets_modal.py +0 -0
  130. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/chat/__init__.py +0 -0
  131. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/chat/commands.py +0 -0
  132. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/chat/loop.py +0 -0
  133. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/chat/mid_turn_policy.py +0 -0
  134. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/chat/rendering.py +0 -0
  135. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/chat/state.py +0 -0
  136. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/chat_resume.py +0 -0
  137. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/chat_slash_completer.py +0 -0
  138. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/__init__.py +0 -0
  139. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/_shared.py +0 -0
  140. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/auth.py +0 -0
  141. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/chat_resume_helpers.py +0 -0
  142. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/chat_state.py +0 -0
  143. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/chat_status.py +0 -0
  144. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/chat_terminal.py +0 -0
  145. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/chat_tui_panels.py +0 -0
  146. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/cli_common.py +0 -0
  147. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/cli_surface.py +0 -0
  148. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/config.py +0 -0
  149. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/conventions.py +0 -0
  150. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/execution_helpers.py +0 -0
  151. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/extensions.py +0 -0
  152. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/forge.py +0 -0
  153. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/forge_asset_view.py +0 -0
  154. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/forge_helpers.py +0 -0
  155. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/hooks.py +0 -0
  156. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/ide_bridge.py +0 -0
  157. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/mcp.py +0 -0
  158. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/profile.py +0 -0
  159. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/prompt_helpers.py +0 -0
  160. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/report.py +0 -0
  161. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/root.py +0 -0
  162. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/sandbox.py +0 -0
  163. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/server.py +0 -0
  164. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/sessions.py +0 -0
  165. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/skills.py +0 -0
  166. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/startup.py +0 -0
  167. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/tools.py +0 -0
  168. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/update.py +0 -0
  169. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/commands/welcome.py +0 -0
  170. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/config_menu.py +0 -0
  171. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/forge.py +0 -0
  172. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/forge_recovery.py +0 -0
  173. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/setup_wizard.py +0 -0
  174. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/__init__.py +0 -0
  175. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/app.py +0 -0
  176. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/config.py +0 -0
  177. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/config_overlay.py +0 -0
  178. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/footer.py +0 -0
  179. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/forge_status.py +0 -0
  180. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/markdown.py +0 -0
  181. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/owl.py +0 -0
  182. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/plan_meta.py +0 -0
  183. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/selection_bindings.py +0 -0
  184. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/setup_app.py +0 -0
  185. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/setup_flow.py +0 -0
  186. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/state.py +0 -0
  187. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/subagent_identity.py +0 -0
  188. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/subagent_panel.py +0 -0
  189. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/surface.py +0 -0
  190. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/transcript.py +0 -0
  191. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/update_prompt.py +0 -0
  192. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/cli_impl/tui/workspace_guard.py +0 -0
  193. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/clipboard.py +0 -0
  194. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/code_review.py +0 -0
  195. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/compaction/__init__.py +0 -0
  196. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/compaction/conversation_compactor.py +0 -0
  197. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/compaction/importance.py +0 -0
  198. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/compaction/settings.py +0 -0
  199. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/compaction/tool_output_offload.py +0 -0
  200. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/config.py +0 -0
  201. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/conflict_auto_resolver.py +0 -0
  202. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/context/__init__.py +0 -0
  203. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/context/tool_schema_budgeter.py +0 -0
  204. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/crash_diagnostics.py +0 -0
  205. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/custom_tools/README.md +0 -0
  206. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/custom_tools/__init__.py +0 -0
  207. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/custom_tools/discovery.py +0 -0
  208. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/custom_tools/runtime.py +0 -0
  209. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/custom_tools/session.py +0 -0
  210. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/custom_tools/trust.py +0 -0
  211. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/diff_paths.py +0 -0
  212. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/direction_change.py +0 -0
  213. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/dispatch_timing.py +0 -0
  214. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/durable_service_manager.py +0 -0
  215. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/edit_discipline.py +0 -0
  216. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/error_text.py +0 -0
  217. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/execution_budget.py +0 -0
  218. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/execution_context.py +0 -0
  219. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/execution_deadline.py +0 -0
  220. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/execution_shared.py +0 -0
  221. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/extensions/README.md +0 -0
  222. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/extensions/__init__.py +0 -0
  223. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/extensions/activation.py +0 -0
  224. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/extensions/install.py +0 -0
  225. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/extensions/manifest.py +0 -0
  226. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/extensions/models.py +0 -0
  227. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/extensions/paths.py +0 -0
  228. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/extensions/registry.json +0 -0
  229. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/extensions/registry.py +0 -0
  230. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/extensions/state.py +0 -0
  231. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/extensions/workspace_trust.py +0 -0
  232. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/failed_task_evidence.py +0 -0
  233. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/failure_category.py +0 -0
  234. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/feedback_report.py +0 -0
  235. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/file_classification.py +0 -0
  236. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/forge.py +0 -0
  237. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/forge_completion.py +0 -0
  238. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/forge_events.py +0 -0
  239. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/frontmatter_utils.py +0 -0
  240. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/git_evidence.py +0 -0
  241. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/git_ops.py +0 -0
  242. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/git_safe.py +0 -0
  243. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/git_worktrees.py +0 -0
  244. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/hooks/README.md +0 -0
  245. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/hooks/__init__.py +0 -0
  246. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/hooks/audit.py +0 -0
  247. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/hooks/config.py +0 -0
  248. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/hooks/dispatcher.py +0 -0
  249. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/hooks/models.py +0 -0
  250. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/hooks/trust.py +0 -0
  251. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/host_actions.py +0 -0
  252. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/host_browser.py +0 -0
  253. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/__init__.py +0 -0
  254. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/activity_events.py +0 -0
  255. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/approvals.py +0 -0
  256. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/artifacts.py +0 -0
  257. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/browser_egress_proxy.py +0 -0
  258. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/cdp_websocket_transport.py +0 -0
  259. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/change_ledger.py +0 -0
  260. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/context_blocks.py +0 -0
  261. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/event_stream.py +0 -0
  262. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/forge_protocol.py +0 -0
  263. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/forge_request_ledger.py +0 -0
  264. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/health.py +0 -0
  265. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/managed_browser.py +0 -0
  266. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/management_protocol.py +0 -0
  267. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/mcp_oauth_coordinator.py +0 -0
  268. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/mcp_oauth_lifecycle.py +0 -0
  269. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/prompt_queue.py +0 -0
  270. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/protocol.py +0 -0
  271. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/resumable_swarm.py +0 -0
  272. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/session_search.py +0 -0
  273. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/stdio_bridge.py +0 -0
  274. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/structured_state.py +0 -0
  275. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/ide/swarm_protocol.py +0 -0
  276. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/integration_gate.py +0 -0
  277. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/interactive_input_guard.py +0 -0
  278. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/interactive_plan_mode.py +0 -0
  279. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/internal_artifacts.py +0 -0
  280. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/knowledge_base.py +0 -0
  281. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/knowledge_capture.py +0 -0
  282. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/knowledge_librarian.py +0 -0
  283. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/language_policy.py +0 -0
  284. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/litellm_static_provider.py +0 -0
  285. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/__init__.py +0 -0
  286. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/anthropic_messages.py +0 -0
  287. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/base.py +0 -0
  288. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/cache_capabilities.py +0 -0
  289. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/cache_control_blocks.py +0 -0
  290. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/cache_policy.py +0 -0
  291. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/factory.py +0 -0
  292. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/gemini_interactions.py +0 -0
  293. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/metadata.py +0 -0
  294. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/openai_responses.py +0 -0
  295. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/protocols.py +0 -0
  296. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/provider_limits.py +0 -0
  297. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/request_plan.py +0 -0
  298. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/request_shape.py +0 -0
  299. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/streaming.py +0 -0
  300. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/temperature_compat.py +0 -0
  301. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/types.py +0 -0
  302. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm/usage_normalization.py +0 -0
  303. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/llm_error_display.py +0 -0
  304. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/logging_redaction.py +0 -0
  305. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/managed_host_deadline.py +0 -0
  306. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/README.md +0 -0
  307. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/__init__.py +0 -0
  308. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/client.py +0 -0
  309. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/config.py +0 -0
  310. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/errors.py +0 -0
  311. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/forge_scope.py +0 -0
  312. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/jsonrpc.py +0 -0
  313. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/manager.py +0 -0
  314. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/models.py +0 -0
  315. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/oauth.py +0 -0
  316. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/oauth_runtime.py +0 -0
  317. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/oauth_store.py +0 -0
  318. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/prompts.py +0 -0
  319. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/resources.py +0 -0
  320. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/roots.py +0 -0
  321. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/server_requests.py +0 -0
  322. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/token_store.py +0 -0
  323. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/transport_http.py +0 -0
  324. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/transport_stdio.py +0 -0
  325. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/mcp/untrusted_content.py +0 -0
  326. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/merge_conflict_reviewer.py +0 -0
  327. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/model_catalog/__init__.py +0 -0
  328. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/model_catalog/chatgpt_codex_subscription_snapshot.json +0 -0
  329. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.json +0 -0
  330. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.meta.json +0 -0
  331. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/model_metadata_policy.py +0 -0
  332. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/model_metadata_utils.py +0 -0
  333. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/model_router.py +0 -0
  334. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/permission_policy.py +0 -0
  335. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/personas.py +0 -0
  336. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/pipeline_facts.py +0 -0
  337. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/plan_assistant.py +0 -0
  338. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/plan_mode.py +0 -0
  339. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/plan_reconciliation.py +0 -0
  340. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/plan_repair.py +0 -0
  341. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/plan_validation.py +0 -0
  342. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/planning_constraints.py +0 -0
  343. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/policy.py +0 -0
  344. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/preview_server.py +0 -0
  345. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/process_reaping.py +0 -0
  346. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/profiles.py +0 -0
  347. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/provider_auth/__init__.py +0 -0
  348. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/provider_auth/base.py +0 -0
  349. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/provider_auth/openai_codex.py +0 -0
  350. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/provider_auth/registry.py +0 -0
  351. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/provider_auth/store.py +0 -0
  352. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/provider_diagnostics.py +0 -0
  353. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/provider_model_catalog.py +0 -0
  354. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/provider_telemetry.py +0 -0
  355. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/provider_url.py +0 -0
  356. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/remote_sync.py +0 -0
  357. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/replanning.py +0 -0
  358. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/repo_scan.py +0 -0
  359. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/request_estimation.py +0 -0
  360. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/review_gate.py +0 -0
  361. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/run_lock.py +0 -0
  362. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/run_outcome.py +0 -0
  363. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/run_provenance.py +0 -0
  364. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/run_state.py +0 -0
  365. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/runtime_artifacts.py +0 -0
  366. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/runtime_context_features.py +0 -0
  367. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/runtime_kind.py +0 -0
  368. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/safety/__init__.py +0 -0
  369. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/safety/mcp_sanitize.py +0 -0
  370. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/safety/safe_http.py +0 -0
  371. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/safety/subagent_report.py +0 -0
  372. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/sandbox_doctor.py +0 -0
  373. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/sandbox_runner.py +0 -0
  374. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/sandbox_settings.py +0 -0
  375. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/serialized_paths.py +0 -0
  376. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/server/__init__.py +0 -0
  377. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/server/app.py +0 -0
  378. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/server/auth.py +0 -0
  379. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/server/job_config.py +0 -0
  380. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/server/settings.py +0 -0
  381. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/server/store.py +0 -0
  382. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/server/worker_runner.py +0 -0
  383. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/service_persistence.py +0 -0
  384. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/session_artifacts.py +0 -0
  385. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/session_metrics.py +0 -0
  386. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/session_store.py +0 -0
  387. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/README.md +0 -0
  388. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/__init__.py +0 -0
  389. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/conventions.py +0 -0
  390. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/discovery.py +0 -0
  391. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/eval_models.py +0 -0
  392. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/eval_runner.py +0 -0
  393. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/evals.py +0 -0
  394. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/install.py +0 -0
  395. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/loader.py +0 -0
  396. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/matching.py +0 -0
  397. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/models.py +0 -0
  398. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/paths.py +0 -0
  399. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/prompting.py +0 -0
  400. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/scaffold.py +0 -0
  401. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/state.py +0 -0
  402. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/transactions.py +0 -0
  403. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/skills/validation.py +0 -0
  404. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/step_budget.py +0 -0
  405. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/subagent_labels.py +0 -0
  406. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/subagents.py +0 -0
  407. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/surface/__init__.py +0 -0
  408. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/surface/base.py +0 -0
  409. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/surface/console.py +0 -0
  410. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/surface/events.py +0 -0
  411. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/surface/hidden_surface.py +0 -0
  412. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/surface/noop_surface.py +0 -0
  413. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/surface/rich_surface.py +0 -0
  414. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/surface/styles.py +0 -0
  415. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/surface/theme.py +0 -0
  416. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/surface/types.py +0 -0
  417. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/swarm_backend.py +0 -0
  418. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/swarm_orchestrator.py +0 -0
  419. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/swarm_scheduler.py +0 -0
  420. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/swarm_trace.py +0 -0
  421. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/swarm_worker.py +0 -0
  422. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/swarm_write_guard.py +0 -0
  423. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/task_dependencies.py +0 -0
  424. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/task_readiness.py +0 -0
  425. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/task_scope.py +0 -0
  426. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/terminal_manager.py +0 -0
  427. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/terminal_ownership.py +0 -0
  428. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/text_normalization.py +0 -0
  429. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/token_budget.py +0 -0
  430. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/README.md +0 -0
  431. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/__init__.py +0 -0
  432. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/artifacts.py +0 -0
  433. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/availability.py +0 -0
  434. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/fs.py +0 -0
  435. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/git.py +0 -0
  436. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/history.py +0 -0
  437. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/http_timeout.py +0 -0
  438. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/image_generation.py +0 -0
  439. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/registry.py +0 -0
  440. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/repo_map.py +0 -0
  441. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/search.py +0 -0
  442. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/shell.py +0 -0
  443. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/symbols.py +0 -0
  444. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/test_discovery.py +0 -0
  445. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/web.py +0 -0
  446. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/web_search_dashscope.py +0 -0
  447. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/web_search_ddgs.py +0 -0
  448. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/tools/web_search_tavily.py +0 -0
  449. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/transport_retry.py +0 -0
  450. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/usage_tracker.py +0 -0
  451. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/verification_command_analysis.py +0 -0
  452. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/verification_contract.py +0 -0
  453. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/verification_failure_summary.py +0 -0
  454. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/verification_repair.py +0 -0
  455. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/verify_gate.py +0 -0
  456. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/web_research.py +0 -0
  457. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/web_search_adapters.py +0 -0
  458. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/web_search_policy.py +0 -0
  459. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/workspace_binding.py +0 -0
  460. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/workspace_binding_ui.py +0 -0
  461. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/workspace_context.py +0 -0
  462. {alysis_code-0.13.1 → alysis_code-0.13.4}/src/alysis_code/workspace_isolation.py +0 -0
  463. {alysis_code-0.13.1 → alysis_code-0.13.4}/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.4
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](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,66 @@ 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.4] - 2026-09-05
412
+
413
+ Model-catalog and TUI-access refresh.
414
+
415
+ ### Added
416
+
417
+ - Added GPT-6 Astra as the default OpenAI model, with aliases, pricing, context-window,
418
+ reasoning, OpenRouter, and ChatGPT-subscription metadata.
419
+ - Added newly available first-party and gateway routes for Claude Fable 5.1, Gemini 3.8
420
+ Flash, Qwen 3.8, GLM-5.3, Kimi K3, Doubao Seed 2.1, DeepSeek V4 snapshots, Grok 4.6,
421
+ and related hosted variants.
422
+
423
+ ### Changed
424
+
425
+ - Refreshed every hosted preset's model picker, aliases, validation model, retirement
426
+ mappings, pricing, context limits, and reasoning contracts against provider catalogs.
427
+ - Updated TUI model labels to preserve vendor naming and made profile pickers show each
428
+ profile's model, host, active state, retired-model state, and duplicates.
429
+ - Migrated the Perplexity preset from the retiring Sonar Chat Completions endpoint to the
430
+ Agent API, including hosted web search and saved-profile migration.
431
+ - Replaced the OpenAI economy and validation model with GPT-5.6 Luna and kept
432
+ GPT-5.3 Codex limited to the Responses preset.
433
+
434
+ ### Fixed
435
+
436
+ - OpenAI Chat Completions now uses `max_completion_tokens` for GPT-5 and newer models.
437
+ - Native Gemini tool and response schemas are projected onto Gemini's supported OpenAPI
438
+ subset before requests are sent.
439
+
440
+ ## [0.13.3] - 2026-08-28
441
+
442
+ ### Fixed
443
+
444
+ - Restored the Ubuntu Python 3.11 and 3.12 CI jobs after the repository cleanup by aligning Ruff
445
+ formatting, updating moved sandbox contract paths, preserving the security-documentation
446
+ contract, making immediate shell-output coverage independent of thread scheduling, and allowing
447
+ harmless floating-point clock precision in deadline coverage.
448
+
449
+ ## [0.13.2] - 2026-08-28
450
+
451
+ Public launch and repository-layout refresh.
452
+
453
+ ### Added
454
+
455
+ - A theme-adaptive README banner with dedicated light and dark artwork.
456
+ - `alysis-code` as the canonical executable, while retaining `alysis` as the short alias.
457
+
458
+ ### Changed
459
+
460
+ - Simplified the public README around installation, core capabilities, modes, and documentation.
461
+ - Moved governance files under `.github/`, release and changelog documents under `docs/`, and
462
+ sandbox and benchmark sources under `scripts/` for a cleaner repository root.
463
+ - Legacy Sylliptor environment and command compatibility now forwards silently while retaining
464
+ diagnostic logging for support.
465
+
466
+ ### Fixed
467
+
468
+ - Device-login approval URLs now remain pinned to the configured Alysis site instead of trusting
469
+ a backend-provided origin.
470
+
411
471
  ## [0.13.1] - 2026-08-27
412
472
 
413
473
  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.1"
7
+ version = "0.13.4"
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. Prints a one-line notice
83
- # and forwards. Remove no earlier than the next major release.
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",
@@ -1,3 +1,3 @@
1
1
  __all__ = ["__version__"]
2
2
 
3
- __version__ = "0.13.1"
3
+ __version__ = "0.13.4"
@@ -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 = str(
315
- body.get("verification_url_complete") or body.get("verification_url") or ""
316
- ).strip()
317
- if not verification_url:
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, with a one-time deprecation notice. See
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 consume_legacy_notices() -> list[str]:
125
- """Drain accumulated deprecation notices for the CLI to surface once."""
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
- with _notice_lock:
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
- Behaves identically to ``alysis``; the only difference is a notice on
38
- stderr, so piping stdout to another program is unaffected.
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