alysis-code 0.13.0__tar.gz → 0.13.3__tar.gz

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