alysis-code 0.14.0__tar.gz → 0.14.1__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 (488) hide show
  1. {alysis_code-0.14.0 → alysis_code-0.14.1}/PKG-INFO +1 -1
  2. {alysis_code-0.14.0 → alysis_code-0.14.1}/docs/CHANGELOG.md +17 -2
  3. {alysis_code-0.14.0 → alysis_code-0.14.1}/pyproject.toml +1 -1
  4. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/__init__.py +1 -1
  5. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/chat/loop.py +44 -12
  6. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/factory.py +8 -0
  7. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/openai_compat.py +5 -2
  8. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/openai_responses.py +39 -5
  9. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/protocols.py +24 -0
  10. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/model_registry.py +16 -0
  11. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/profile_presets.py +3 -1
  12. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/reasoning_contracts.py +11 -0
  13. {alysis_code-0.14.0 → alysis_code-0.14.1}/.gitignore +0 -0
  14. {alysis_code-0.14.0 → alysis_code-0.14.1}/LICENSE +0 -0
  15. {alysis_code-0.14.0 → alysis_code-0.14.1}/NOTICE +0 -0
  16. {alysis_code-0.14.0 → alysis_code-0.14.1}/README.md +0 -0
  17. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/__main__.py +0 -0
  18. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/_build_info.py +0 -0
  19. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/account_login.py +0 -0
  20. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/README.md +0 -0
  21. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/__init__.py +0 -0
  22. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/acceptance_contract.py +0 -0
  23. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/anytime_checkpoint.py +0 -0
  24. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/blast_radius.py +0 -0
  25. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/cache_keepalive.py +0 -0
  26. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/checkpoint_worker.py +0 -0
  27. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/completion_certificate.py +0 -0
  28. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/completion_gate.py +0 -0
  29. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/empty_response_stall.py +0 -0
  30. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/errors.py +0 -0
  31. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/llm_calls.py +0 -0
  32. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/mutation_classification.py +0 -0
  33. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/prompt_context.py +0 -0
  34. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/prompt_families.py +0 -0
  35. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/prompt_guidance.py +0 -0
  36. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/read_ledger.py +0 -0
  37. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/regression_baseline.py +0 -0
  38. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/reproduction_first.py +0 -0
  39. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/sensitive_output.py +0 -0
  40. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/session.py +0 -0
  41. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/steering.py +0 -0
  42. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/subagent_execution.py +0 -0
  43. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/subagent_workspace.py +0 -0
  44. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/task_evidence.py +0 -0
  45. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/task_state.py +0 -0
  46. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/tools_assembly.py +0 -0
  47. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/turn/__init__.py +0 -0
  48. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/turn/core.py +0 -0
  49. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/turn/events.py +0 -0
  50. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/turn/exploration.py +0 -0
  51. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/turn/interventions.py +0 -0
  52. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/turn/read_cache.py +0 -0
  53. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/turn/snapshot.py +0 -0
  54. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/turn/subagent_progress.py +0 -0
  55. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/turn_contract.py +0 -0
  56. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/turn_path.py +0 -0
  57. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/verification.py +0 -0
  58. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/verification_commands.py +0 -0
  59. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/verification_evidence.py +0 -0
  60. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent/verification_result.py +0 -0
  61. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent_loop.py +0 -0
  62. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent_runtimes/__init__.py +0 -0
  63. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent_runtimes/base.py +0 -0
  64. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent_runtimes/builtins.py +0 -0
  65. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent_runtimes/codex_cli.py +0 -0
  66. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent_runtimes/host.py +0 -0
  67. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent_runtimes/registry.py +0 -0
  68. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agent_runtimes/service.py +0 -0
  69. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agentbox_client.py +0 -0
  70. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/agentbox_integration.py +0 -0
  71. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/alysis_cloud.py +0 -0
  72. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/approval_scope.py +0 -0
  73. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/README.md +0 -0
  74. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/__init__.py +0 -0
  75. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/asset_read_core.py +0 -0
  76. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/budget_allocator.py +0 -0
  77. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/comprehender.py +0 -0
  78. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/index.py +0 -0
  79. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/ingestion.py +0 -0
  80. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/legacy_migration.py +0 -0
  81. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/local_tools.py +0 -0
  82. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/models.py +0 -0
  83. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/ocr.py +0 -0
  84. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-000.txt +0 -0
  85. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-001.txt +0 -0
  86. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-002.txt +0 -0
  87. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-003.txt +0 -0
  88. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-004.txt +0 -0
  89. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-005.txt +0 -0
  90. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-006.txt +0 -0
  91. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-007.txt +0 -0
  92. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-008.txt +0 -0
  93. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-009.txt +0 -0
  94. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-010.txt +0 -0
  95. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-011.txt +0 -0
  96. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-012.txt +0 -0
  97. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-013.txt +0 -0
  98. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-014.txt +0 -0
  99. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-015.txt +0 -0
  100. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-016.txt +0 -0
  101. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-017.txt +0 -0
  102. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-018.txt +0 -0
  103. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-019.txt +0 -0
  104. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/ascii/f-020.txt +0 -0
  105. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/index.html +0 -0
  106. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/owl/show-owl.sh +0 -0
  107. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/paths.py +0 -0
  108. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/plan_binding.py +0 -0
  109. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/planner_context.py +0 -0
  110. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/planner_tools.py +0 -0
  111. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/prompts.py +0 -0
  112. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/replanner_context.py +0 -0
  113. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/surface.py +0 -0
  114. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/untrusted_content.py +0 -0
  115. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/usage_logger.py +0 -0
  116. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/worker_mirror.py +0 -0
  117. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/worker_section.py +0 -0
  118. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/assets/worker_tools.py +0 -0
  119. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/atomic_io.py +0 -0
  120. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/auth_diagnostics.py +0 -0
  121. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/background_runner.py +0 -0
  122. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/branding.py +0 -0
  123. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/budget_policy.py +0 -0
  124. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/build_identity.py +0 -0
  125. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/builtin_hooks/__init__.py +0 -0
  126. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/builtin_hooks/notify_done_windows.py +0 -0
  127. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/bwrap_etc.py +0 -0
  128. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cancellation.py +0 -0
  129. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/capabilities.py +0 -0
  130. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/chatgpt_codex_static_provider.py +0 -0
  131. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/checkpoint_settings.py +0 -0
  132. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli.py +0 -0
  133. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/__init__.py +0 -0
  134. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/assets_cli.py +0 -0
  135. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/assets_modal.py +0 -0
  136. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/chat/__init__.py +0 -0
  137. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/chat/commands.py +0 -0
  138. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/chat/forge_visibility.py +0 -0
  139. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/chat/mid_turn_policy.py +0 -0
  140. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/chat/rendering.py +0 -0
  141. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/chat/state.py +0 -0
  142. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/chat_resume.py +0 -0
  143. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/chat_slash_completer.py +0 -0
  144. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/__init__.py +0 -0
  145. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/_shared.py +0 -0
  146. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/auth.py +0 -0
  147. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/chat_resume_helpers.py +0 -0
  148. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/chat_state.py +0 -0
  149. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/chat_status.py +0 -0
  150. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/chat_terminal.py +0 -0
  151. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/chat_tui_panels.py +0 -0
  152. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/cli_common.py +0 -0
  153. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/cli_surface.py +0 -0
  154. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/config.py +0 -0
  155. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/conventions.py +0 -0
  156. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/execution_helpers.py +0 -0
  157. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/extensions.py +0 -0
  158. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/forge.py +0 -0
  159. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/forge_asset_view.py +0 -0
  160. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/forge_helpers.py +0 -0
  161. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/hooks.py +0 -0
  162. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/ide_bridge.py +0 -0
  163. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/mcp.py +0 -0
  164. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/profile.py +0 -0
  165. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/prompt_helpers.py +0 -0
  166. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/report.py +0 -0
  167. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/root.py +0 -0
  168. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/sandbox.py +0 -0
  169. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/server.py +0 -0
  170. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/sessions.py +0 -0
  171. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/skills.py +0 -0
  172. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/startup.py +0 -0
  173. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/tools.py +0 -0
  174. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/update.py +0 -0
  175. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/commands/welcome.py +0 -0
  176. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/config_menu.py +0 -0
  177. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/forge.py +0 -0
  178. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/forge_recovery.py +0 -0
  179. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/setup_wizard.py +0 -0
  180. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/__init__.py +0 -0
  181. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/app.py +0 -0
  182. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/attachments.py +0 -0
  183. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/composer.py +0 -0
  184. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/config.py +0 -0
  185. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/config_flow.py +0 -0
  186. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/config_overlay.py +0 -0
  187. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/content.py +0 -0
  188. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/footer.py +0 -0
  189. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/forge_status.py +0 -0
  190. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/links.py +0 -0
  191. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/markdown.py +0 -0
  192. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/owl.py +0 -0
  193. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/plan_meta.py +0 -0
  194. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/selection_bindings.py +0 -0
  195. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/setup_app.py +0 -0
  196. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/setup_flow.py +0 -0
  197. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/state.py +0 -0
  198. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/subagent_identity.py +0 -0
  199. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/subagent_panel.py +0 -0
  200. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/surface.py +0 -0
  201. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/tips.py +0 -0
  202. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/transcript.py +0 -0
  203. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/update_prompt.py +0 -0
  204. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/cli_impl/tui/workspace_guard.py +0 -0
  205. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/clipboard.py +0 -0
  206. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/code_review.py +0 -0
  207. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/compaction/__init__.py +0 -0
  208. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/compaction/conversation_compactor.py +0 -0
  209. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/compaction/importance.py +0 -0
  210. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/compaction/settings.py +0 -0
  211. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/compaction/tool_output_offload.py +0 -0
  212. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/config.py +0 -0
  213. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/conflict_auto_resolver.py +0 -0
  214. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/consumer_verification.py +0 -0
  215. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/context/__init__.py +0 -0
  216. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/context/tool_schema_budgeter.py +0 -0
  217. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/crash_diagnostics.py +0 -0
  218. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/custom_tools/README.md +0 -0
  219. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/custom_tools/__init__.py +0 -0
  220. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/custom_tools/discovery.py +0 -0
  221. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/custom_tools/runtime.py +0 -0
  222. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/custom_tools/session.py +0 -0
  223. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/custom_tools/trust.py +0 -0
  224. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/diff_paths.py +0 -0
  225. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/direction_change.py +0 -0
  226. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/dispatch_timing.py +0 -0
  227. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/durable_service_manager.py +0 -0
  228. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/edit_discipline.py +0 -0
  229. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/error_text.py +0 -0
  230. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/execution_budget.py +0 -0
  231. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/execution_context.py +0 -0
  232. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/execution_deadline.py +0 -0
  233. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/execution_shared.py +0 -0
  234. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/extensions/README.md +0 -0
  235. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/extensions/__init__.py +0 -0
  236. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/extensions/activation.py +0 -0
  237. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/extensions/install.py +0 -0
  238. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/extensions/manifest.py +0 -0
  239. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/extensions/models.py +0 -0
  240. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/extensions/paths.py +0 -0
  241. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/extensions/registry.json +0 -0
  242. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/extensions/registry.py +0 -0
  243. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/extensions/state.py +0 -0
  244. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/extensions/workspace_trust.py +0 -0
  245. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/failed_task_evidence.py +0 -0
  246. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/failure_category.py +0 -0
  247. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/feedback_report.py +0 -0
  248. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/file_classification.py +0 -0
  249. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/forge.py +0 -0
  250. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/forge_completion.py +0 -0
  251. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/forge_events.py +0 -0
  252. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/frontmatter_utils.py +0 -0
  253. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/git_evidence.py +0 -0
  254. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/git_ops.py +0 -0
  255. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/git_safe.py +0 -0
  256. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/git_worktrees.py +0 -0
  257. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/hooks/README.md +0 -0
  258. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/hooks/__init__.py +0 -0
  259. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/hooks/audit.py +0 -0
  260. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/hooks/config.py +0 -0
  261. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/hooks/dispatcher.py +0 -0
  262. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/hooks/models.py +0 -0
  263. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/hooks/trust.py +0 -0
  264. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/host_actions.py +0 -0
  265. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/host_browser.py +0 -0
  266. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/__init__.py +0 -0
  267. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/activity_events.py +0 -0
  268. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/approvals.py +0 -0
  269. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/artifacts.py +0 -0
  270. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/browser_egress_proxy.py +0 -0
  271. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/cdp_websocket_transport.py +0 -0
  272. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/change_ledger.py +0 -0
  273. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/context_blocks.py +0 -0
  274. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/event_stream.py +0 -0
  275. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/forge_protocol.py +0 -0
  276. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/forge_request_ledger.py +0 -0
  277. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/health.py +0 -0
  278. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/managed_browser.py +0 -0
  279. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/management_protocol.py +0 -0
  280. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/mcp_oauth_coordinator.py +0 -0
  281. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/mcp_oauth_lifecycle.py +0 -0
  282. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/prompt_queue.py +0 -0
  283. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/protocol.py +0 -0
  284. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/resumable_swarm.py +0 -0
  285. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/session_search.py +0 -0
  286. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/stdio_bridge.py +0 -0
  287. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/structured_state.py +0 -0
  288. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/ide/swarm_protocol.py +0 -0
  289. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/integration_gate.py +0 -0
  290. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/interactive_input_guard.py +0 -0
  291. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/internal_artifacts.py +0 -0
  292. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/knowledge_base.py +0 -0
  293. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/knowledge_capture.py +0 -0
  294. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/knowledge_librarian.py +0 -0
  295. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/language_policy.py +0 -0
  296. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/litellm_static_provider.py +0 -0
  297. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/__init__.py +0 -0
  298. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/anthropic_messages.py +0 -0
  299. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/base.py +0 -0
  300. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/cache_capabilities.py +0 -0
  301. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/cache_control_blocks.py +0 -0
  302. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/cache_policy.py +0 -0
  303. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/gemini_generate_content.py +0 -0
  304. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/gemini_interactions.py +0 -0
  305. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/http_cancellation.py +0 -0
  306. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/metadata.py +0 -0
  307. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/provider_limits.py +0 -0
  308. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/request_plan.py +0 -0
  309. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/request_shape.py +0 -0
  310. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/streaming.py +0 -0
  311. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/temperature_compat.py +0 -0
  312. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/tool_call_markup.py +0 -0
  313. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/types.py +0 -0
  314. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm/usage_normalization.py +0 -0
  315. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/llm_error_display.py +0 -0
  316. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/logging_redaction.py +0 -0
  317. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/managed_host_deadline.py +0 -0
  318. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/README.md +0 -0
  319. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/__init__.py +0 -0
  320. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/client.py +0 -0
  321. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/config.py +0 -0
  322. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/errors.py +0 -0
  323. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/forge_scope.py +0 -0
  324. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/jsonrpc.py +0 -0
  325. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/manager.py +0 -0
  326. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/models.py +0 -0
  327. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/oauth.py +0 -0
  328. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/oauth_runtime.py +0 -0
  329. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/oauth_store.py +0 -0
  330. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/prompts.py +0 -0
  331. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/resources.py +0 -0
  332. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/roots.py +0 -0
  333. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/server_requests.py +0 -0
  334. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/token_store.py +0 -0
  335. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/transport_http.py +0 -0
  336. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/transport_stdio.py +0 -0
  337. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/mcp/untrusted_content.py +0 -0
  338. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/merge_conflict_reviewer.py +0 -0
  339. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/model_catalog/__init__.py +0 -0
  340. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/model_catalog/chatgpt_codex_subscription_snapshot.json +0 -0
  341. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.json +0 -0
  342. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.meta.json +0 -0
  343. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/model_metadata_policy.py +0 -0
  344. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/model_metadata_utils.py +0 -0
  345. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/model_router.py +0 -0
  346. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/permission_policy.py +0 -0
  347. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/personas.py +0 -0
  348. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/pipeline_facts.py +0 -0
  349. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/plan_assistant.py +0 -0
  350. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/plan_reconciliation.py +0 -0
  351. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/plan_repair.py +0 -0
  352. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/plan_validation.py +0 -0
  353. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/planning_constraints.py +0 -0
  354. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/policy.py +0 -0
  355. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/preview_server.py +0 -0
  356. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/private_artifact_io.py +0 -0
  357. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/process_reaping.py +0 -0
  358. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/profiles.py +0 -0
  359. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/prompt_guidance_catalog.py +0 -0
  360. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/provider_auth/__init__.py +0 -0
  361. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/provider_auth/base.py +0 -0
  362. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/provider_auth/openai_codex.py +0 -0
  363. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/provider_auth/registry.py +0 -0
  364. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/provider_auth/store.py +0 -0
  365. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/provider_diagnostics.py +0 -0
  366. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/provider_model_catalog.py +0 -0
  367. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/provider_telemetry.py +0 -0
  368. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/provider_url.py +0 -0
  369. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/remote_sync.py +0 -0
  370. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/replanning.py +0 -0
  371. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/repo_scan.py +0 -0
  372. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/request_estimation.py +0 -0
  373. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/review_gate.py +0 -0
  374. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/run_lock.py +0 -0
  375. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/run_outcome.py +0 -0
  376. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/run_provenance.py +0 -0
  377. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/run_state.py +0 -0
  378. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/runtime_artifacts.py +0 -0
  379. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/runtime_context_features.py +0 -0
  380. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/runtime_kind.py +0 -0
  381. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/safety/__init__.py +0 -0
  382. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/safety/mcp_sanitize.py +0 -0
  383. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/safety/safe_http.py +0 -0
  384. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/safety/subagent_report.py +0 -0
  385. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/sandbox_doctor.py +0 -0
  386. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/sandbox_runner.py +0 -0
  387. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/sandbox_settings.py +0 -0
  388. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/serialized_paths.py +0 -0
  389. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/server/__init__.py +0 -0
  390. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/server/app.py +0 -0
  391. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/server/auth.py +0 -0
  392. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/server/job_config.py +0 -0
  393. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/server/settings.py +0 -0
  394. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/server/store.py +0 -0
  395. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/server/worker_runner.py +0 -0
  396. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/service_persistence.py +0 -0
  397. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/session_artifacts.py +0 -0
  398. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/session_metrics.py +0 -0
  399. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/session_store.py +0 -0
  400. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/README.md +0 -0
  401. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/__init__.py +0 -0
  402. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/bundled/address-pr-comments/SKILL.md +0 -0
  403. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/bundled/code-review/SKILL.md +0 -0
  404. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/bundled/commit/SKILL.md +0 -0
  405. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/bundled/debug/SKILL.md +0 -0
  406. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/bundled/fix-ci/SKILL.md +0 -0
  407. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/bundled/release-notes/SKILL.md +0 -0
  408. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/bundled/security-review/SKILL.md +0 -0
  409. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/bundled/skill-creator/SKILL.md +0 -0
  410. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/conventions.py +0 -0
  411. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/discovery.py +0 -0
  412. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/eval_models.py +0 -0
  413. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/eval_runner.py +0 -0
  414. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/evals.py +0 -0
  415. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/install.py +0 -0
  416. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/loader.py +0 -0
  417. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/matching.py +0 -0
  418. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/models.py +0 -0
  419. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/paths.py +0 -0
  420. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/prompting.py +0 -0
  421. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/scaffold.py +0 -0
  422. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/state.py +0 -0
  423. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/transactions.py +0 -0
  424. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/skills/validation.py +0 -0
  425. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/step_budget.py +0 -0
  426. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/subagent_labels.py +0 -0
  427. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/subagents.py +0 -0
  428. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/surface/__init__.py +0 -0
  429. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/surface/base.py +0 -0
  430. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/surface/console.py +0 -0
  431. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/surface/events.py +0 -0
  432. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/surface/hidden_surface.py +0 -0
  433. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/surface/noop_surface.py +0 -0
  434. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/surface/rich_surface.py +0 -0
  435. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/surface/styles.py +0 -0
  436. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/surface/theme.py +0 -0
  437. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/surface/types.py +0 -0
  438. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/swarm_backend.py +0 -0
  439. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/swarm_orchestrator.py +0 -0
  440. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/swarm_scheduler.py +0 -0
  441. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/swarm_trace.py +0 -0
  442. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/swarm_worker.py +0 -0
  443. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/swarm_write_guard.py +0 -0
  444. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/task_dependencies.py +0 -0
  445. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/task_readiness.py +0 -0
  446. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/task_scope.py +0 -0
  447. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/terminal_manager.py +0 -0
  448. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/terminal_ownership.py +0 -0
  449. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/text_normalization.py +0 -0
  450. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/token_budget.py +0 -0
  451. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/README.md +0 -0
  452. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/__init__.py +0 -0
  453. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/artifacts.py +0 -0
  454. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/availability.py +0 -0
  455. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/capability_readiness.py +0 -0
  456. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/fs.py +0 -0
  457. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/git.py +0 -0
  458. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/history.py +0 -0
  459. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/http_timeout.py +0 -0
  460. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/image_generation.py +0 -0
  461. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/registry.py +0 -0
  462. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/repo_map.py +0 -0
  463. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/search.py +0 -0
  464. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/shell.py +0 -0
  465. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/symbols.py +0 -0
  466. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/test_discovery.py +0 -0
  467. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/web.py +0 -0
  468. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/web_search.py +0 -0
  469. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/web_search_dashscope.py +0 -0
  470. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/web_search_ddgs.py +0 -0
  471. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/web_search_provider_adapters.py +0 -0
  472. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/tools/web_search_tavily.py +0 -0
  473. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/transport_retry.py +0 -0
  474. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/updates.py +0 -0
  475. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/usage_tracker.py +0 -0
  476. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/verification_command_analysis.py +0 -0
  477. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/verification_contract.py +0 -0
  478. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/verification_failure_summary.py +0 -0
  479. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/verification_repair.py +0 -0
  480. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/verify_gate.py +0 -0
  481. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/web_research.py +0 -0
  482. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/web_search_adapters.py +0 -0
  483. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/web_search_policy.py +0 -0
  484. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/workspace_binding.py +0 -0
  485. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/workspace_binding_ui.py +0 -0
  486. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/workspace_context.py +0 -0
  487. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/workspace_isolation.py +0 -0
  488. {alysis_code-0.14.0 → alysis_code-0.14.1}/src/alysis_code/workspace_provisioning.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alysis-code
3
- Version: 0.14.0
3
+ Version: 0.14.1
4
4
  Summary: Local CLI coding agent powered by any API.
5
5
  Project-URL: Changelog, https://github.com/AlysisAi/alysis-code/blob/main/docs/CHANGELOG.md
6
6
  Project-URL: Documentation, https://github.com/AlysisAi/alysis-code/tree/main/docs
@@ -6,7 +6,21 @@ Notable user-facing changes to Alysis Code are recorded here. This project follo
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
- No user-facing changes yet.
9
+ ## [0.14.1] - 2026-09-25
10
+
11
+ ### Added
12
+
13
+ - Add GPT-6 Luna to the Alysis Code account model picker, with hosted Responses
14
+ routing, configurable reasoning, and stateless function-tool continuation.
15
+ Luna uses the account's shared credit allowance alongside the Flash models.
16
+
17
+ ### Fixed
18
+
19
+ - Rebuild the correct chat and compactor transports when switching between hosted
20
+ Luna and Flash models during a conversation, while preserving the session on a
21
+ failed switch.
22
+ - Keep hosted web search as a function tool and show the gateway's capacity,
23
+ request, and credit-limit reasons instead of a generic rate-limit message.
10
24
 
11
25
  ## [0.14.0] - 2026-09-24
12
26
 
@@ -342,7 +356,8 @@ Public launch and repository-layout refresh.
342
356
  Release notes for versions before 0.9.8 remain available in the
343
357
  [GitHub Releases archive](https://github.com/AlysisAi/alysis-code/releases).
344
358
 
345
- [Unreleased]: https://github.com/AlysisAi/alysis-code/compare/v0.14.0...HEAD
359
+ [Unreleased]: https://github.com/AlysisAi/alysis-code/compare/v0.14.1...HEAD
360
+ [0.14.1]: https://github.com/AlysisAi/alysis-code/compare/v0.14.0...v0.14.1
346
361
  [0.14.0]: https://github.com/AlysisAi/alysis-code/compare/v0.13.8...v0.14.0
347
362
  [0.13.8]: https://github.com/AlysisAi/alysis-code/compare/v0.13.7...v0.13.8
348
363
  [0.13.7]: https://github.com/AlysisAi/alysis-code/compare/v0.13.6.2...v0.13.7
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "alysis-code"
7
- version = "0.14.0"
7
+ version = "0.14.1"
8
8
  description = "Local CLI coding agent powered by any API."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,3 +1,3 @@
1
1
  __all__ = ["__version__"]
2
2
 
3
- __version__ = "0.14.0"
3
+ __version__ = "0.14.1"
@@ -947,6 +947,8 @@ def _reset_route_local_client_capabilities(client: Any, *, route_changed: bool)
947
947
 
948
948
  _RELOAD_SESSION_FIELDS = (
949
949
  "cfg",
950
+ "client",
951
+ "conversation_compactor",
950
952
  "routing_mode",
951
953
  "max_steps",
952
954
  "api_key",
@@ -1093,7 +1095,7 @@ def _apply_config_menu_changes_to_session_mutating(*, session: Any, cfg: AppConf
1093
1095
  )
1094
1096
  from ...llm.cache_capabilities import resolve_effective_cache_capability
1095
1097
  from ...llm.cache_policy import build_prompt_cache_namespace, resolve_prompt_cache_policy
1096
- from ...llm.factory import _session_routing_headers
1098
+ from ...llm.factory import _session_routing_headers, make_llm_client, resolve_model_protocol
1097
1099
  from ...llm.metadata import (
1098
1100
  build_provider_route_identity,
1099
1101
  credential_scope_fingerprint,
@@ -1125,7 +1127,7 @@ def _apply_config_menu_changes_to_session_mutating(*, session: Any, cfg: AppConf
1125
1127
  )
1126
1128
  active_profile = get_active_profile(session.cfg)
1127
1129
  effective_base_url = resolve_effective_base_url(cfg=session.cfg, profile=active_profile)
1128
- protocol = str(active_profile.protocol or OPENAI_COMPAT_PROTOCOL).strip()
1130
+ profile_protocol = str(active_profile.protocol or OPENAI_COMPAT_PROTOCOL).strip()
1129
1131
  resolved_key = resolve_api_key(session.cfg)
1130
1132
  session.api_key = str(resolved_key.key or "")
1131
1133
  session.api_key_source = (
@@ -1166,8 +1168,41 @@ def _apply_config_menu_changes_to_session_mutating(*, session: Any, cfg: AppConf
1166
1168
  model: str,
1167
1169
  role: str,
1168
1170
  temperature: float | None = None,
1169
- ) -> None:
1171
+ ) -> Any:
1170
1172
  existing_route_identity = getattr(client, "route_identity", None)
1173
+ preset = find_preset_for_profile(active_profile)
1174
+ provider_key = str(preset.provider_key or "").strip() if preset is not None else ""
1175
+ if not provider_key:
1176
+ provider_key = resolve_model_provider_key(
1177
+ cfg=session.cfg,
1178
+ model_name=model,
1179
+ base_url=effective_base_url,
1180
+ profile_name=active_profile.name,
1181
+ )
1182
+ protocol = resolve_model_protocol(
1183
+ provider_key=provider_key, model=model, protocol=profile_protocol
1184
+ )
1185
+ existing_protocol = str(getattr(existing_route_identity, "protocol", "") or "")
1186
+ if existing_protocol and existing_protocol != protocol:
1187
+ return make_llm_client(
1188
+ cfg=session.cfg,
1189
+ api_key=session.api_key,
1190
+ model=model,
1191
+ timeout_s=timeout_s,
1192
+ temperature=temperature if temperature is not None else client.temperature,
1193
+ prompt_cache_key=prompt_cache_key,
1194
+ prompt_cache_retention=prompt_cache_retention,
1195
+ prompt_cache_namespace=build_prompt_cache_namespace(
1196
+ workspace_root=getattr(session, "root", None),
1197
+ role=role,
1198
+ profile_name=active_profile.name,
1199
+ ),
1200
+ enable_thinking=enable_thinking,
1201
+ reasoning_effort=reasoning_effort,
1202
+ transport=getattr(client, "_transport", None),
1203
+ profile=active_profile,
1204
+ session_id=provider_session_id,
1205
+ )
1171
1206
  client.base_url = effective_base_url
1172
1207
  if hasattr(client, "provider_auth"):
1173
1208
  client.provider_auth = provider_auth
@@ -1178,17 +1213,10 @@ def _apply_config_menu_changes_to_session_mutating(*, session: Any, cfg: AppConf
1178
1213
  client.timeout_s = timeout_s
1179
1214
  if temperature is not None:
1180
1215
  client.temperature = temperature
1181
- provider_key = resolve_model_provider_key(
1182
- cfg=session.cfg,
1183
- model_name=model,
1184
- base_url=effective_base_url,
1185
- profile_name=active_profile.name,
1186
- )
1187
1216
  capabilities = get_provider_protocol_capabilities(
1188
1217
  provider_key=provider_key,
1189
1218
  protocol=protocol,
1190
1219
  )
1191
- preset = find_preset_for_profile(active_profile)
1192
1220
  cache_capability = resolve_effective_cache_capability(
1193
1221
  provider_key=provider_key,
1194
1222
  protocol=protocol,
@@ -1331,10 +1359,11 @@ def _apply_config_menu_changes_to_session_mutating(*, session: Any, cfg: AppConf
1331
1359
  client.provider_concurrency_caps = dict(session.cfg.provider_concurrency_caps)
1332
1360
  if hasattr(client, "provider_retry_settings"):
1333
1361
  client.provider_retry_settings = provider_retry_settings
1362
+ return client
1334
1363
 
1335
1364
  client = getattr(session, "client", None)
1336
1365
  if client is not None:
1337
- _apply_client_config(
1366
+ session.client = _apply_client_config(
1338
1367
  client,
1339
1368
  model=str(session.cfg.model or ""),
1340
1369
  role=ROLE_CODING,
@@ -1353,12 +1382,15 @@ def _apply_config_menu_changes_to_session_mutating(*, session: Any, cfg: AppConf
1353
1382
  )
1354
1383
  except ConfigError:
1355
1384
  compactor_model = str(session.cfg.model or "")
1356
- _apply_client_config(
1385
+ refreshed_compactor_client = _apply_client_config(
1357
1386
  compactor_client,
1358
1387
  model=compactor_model,
1359
1388
  role=ROLE_COMPACTOR,
1360
1389
  temperature=resolve_role_temperature(session.cfg, role=ROLE_COMPACTOR),
1361
1390
  )
1391
+ if refreshed_compactor_client is not compactor_client:
1392
+ session.conversation_compactor = copy.copy(compactor)
1393
+ session.conversation_compactor.compactor_client = refreshed_compactor_client
1362
1394
 
1363
1395
  _rebuild_session_tools_for_mode(
1364
1396
  session=session,
@@ -126,6 +126,7 @@ def make_llm_client(
126
126
  base_url=base_url,
127
127
  profile_name=resolved_profile.name,
128
128
  )
129
+ protocol = resolve_model_protocol(provider_key=provider_key, model=model, protocol=protocol)
129
130
  capabilities = get_provider_protocol_capabilities(
130
131
  provider_key=provider_key,
131
132
  protocol=protocol,
@@ -376,6 +377,13 @@ def make_llm_client(
376
377
  )
377
378
 
378
379
 
380
+ def resolve_model_protocol(*, provider_key: str | None, model: str, protocol: str) -> str:
381
+ """Resolve model-specific transports for initial connections and live switches."""
382
+ if provider_key == "alysis" and model == "gpt-6-luna":
383
+ return OPENAI_RESPONSES_PROTOCOL
384
+ return protocol
385
+
386
+
379
387
  def _attach_reasoning_trace_capability(client: ChatClient, capability: object) -> ChatClient:
380
388
  """Expose the resolved trace dialect without widening every client constructor."""
381
389
 
@@ -1329,8 +1329,9 @@ _ALYSIS_PROXY_ERROR_MESSAGES: dict[str, str] = {
1329
1329
  "You're sending requests too quickly. Please wait a moment and try again."
1330
1330
  ),
1331
1331
  "hosted_capacity_exceeded": (
1332
- "Hosted model capacity is full. Please retry in a few seconds. "
1333
- "No generation was started and your reserved credits were released."
1332
+ "The Alysis hosted model is unavailable or at capacity. "
1333
+ "If this persists, its server route needs checking. "
1334
+ "No generation was started and no credits were charged."
1334
1335
  ),
1335
1336
  "hosted_routing_unavailable": (
1336
1337
  "Hosted model routing is temporarily unavailable. Please retry shortly. "
@@ -1369,7 +1370,9 @@ def alysis_trial_error_message(err: LLMError) -> str | None:
1369
1370
  "5-hour fair-use limit reached (",
1370
1371
  "Weekly fair-use limit reached (",
1371
1372
  "Four hosted requests are already running for your account.",
1373
+ "Your account has reached its hosted request limit.",
1372
1374
  "Available credits cannot cover this request while other usage or reservations apply.",
1375
+ "Your available credit allowance is exhausted.",
1373
1376
  )
1374
1377
  )
1375
1378
  ):
@@ -35,6 +35,7 @@ from .metadata import (
35
35
  merge_canonical_headers,
36
36
  stamp_response_for_route,
37
37
  )
38
+ from .protocols import OPENAI_RESPONSES_PROTOCOL, get_provider_protocol_capabilities
38
39
  from .provider_limits import (
39
40
  DEFAULT_PROVIDER_CONCURRENCY_CAPS,
40
41
  ProviderRetrySettings,
@@ -867,6 +868,7 @@ def _responses_tools(
867
868
  *,
868
869
  mode: str,
869
870
  adapter: str,
871
+ provider_key: str | None = None,
870
872
  ) -> _ResponsesToolMapping:
871
873
  normalized_mode = str(mode or "off").strip().lower()
872
874
  normalized_adapter = (
@@ -874,8 +876,26 @@ def _responses_tools(
874
876
  )
875
877
  raw_tools = [tool for tool in tools or [] if isinstance(tool, dict)]
876
878
  alysis_web_search_present = any(_is_alysis_web_search_function(tool) for tool in raw_tools)
879
+ capabilities = get_provider_protocol_capabilities(
880
+ provider_key=provider_key or "", protocol=OPENAI_RESPONSES_PROTOCOL
881
+ )
882
+ builtin_web_search_allowed = (
883
+ capabilities is None or capabilities.supports_provider_hosted_web_search_adapter
884
+ )
885
+ hosted_web_search_present = any(
886
+ _is_responses_hosted_web_search_tool(tool) for tool in raw_tools
887
+ )
888
+ if not builtin_web_search_allowed and (
889
+ (normalized_mode == "native" and alysis_web_search_present)
890
+ or (normalized_mode in {"auto", "native"} and hosted_web_search_present)
891
+ ):
892
+ raise LLMError(
893
+ f"Provider {provider_key!r} does not support built-in web search. "
894
+ "Use web_search_mode='auto' or 'external' with the Alysis web_search function."
895
+ )
877
896
  use_openai_builtin_web_search = (
878
- alysis_web_search_present
897
+ builtin_web_search_allowed
898
+ and alysis_web_search_present
879
899
  and _openai_builtin_web_search_allowed(
880
900
  mode=normalized_mode,
881
901
  adapter=normalized_adapter,
@@ -1916,12 +1936,16 @@ class OpenAIResponsesClient:
1916
1936
  )
1917
1937
  error_message = _extract_error_message(data)
1918
1938
  if error_message:
1919
- return LLMError(
1939
+ err = LLMError(
1920
1940
  sanitize_error_text_for_output(f"LLM error {response.status_code}: {error_message}")
1921
1941
  )
1922
- return LLMError(
1923
- sanitize_error_text_for_output(f"LLM error {response.status_code}: {data!r}")
1924
- )
1942
+ else:
1943
+ err = LLMError(
1944
+ sanitize_error_text_for_output(f"LLM error {response.status_code}: {data!r}")
1945
+ )
1946
+ err.provider_status_code = response.status_code
1947
+ err.provider_error_body = sanitize_error_text_for_output(json.dumps(data))
1948
+ return err
1925
1949
 
1926
1950
  def count_input_tokens(
1927
1951
  self,
@@ -1940,6 +1964,7 @@ class OpenAIResponsesClient:
1940
1964
  tools,
1941
1965
  mode=self.web_search_mode,
1942
1966
  adapter=self.web_search_adapter,
1967
+ provider_key=self.provider_key,
1943
1968
  )
1944
1969
  payload: dict[str, Any] = {
1945
1970
  "model": self.model,
@@ -2080,6 +2105,7 @@ class OpenAIResponsesClient:
2080
2105
  tools,
2081
2106
  mode=self.web_search_mode,
2082
2107
  adapter=self.web_search_adapter,
2108
+ provider_key=self.provider_key,
2083
2109
  )
2084
2110
  mapped_tools = tool_mapping.tools
2085
2111
  temp_omit_key = _responses_temperature_omit_key(self.base_url, self.model)
@@ -2106,6 +2132,10 @@ class OpenAIResponsesClient:
2106
2132
  supports_previous_response_id = self.provider_auth is None or bool(
2107
2133
  getattr(self.provider_auth, "supports_previous_response_id", True)
2108
2134
  )
2135
+ if self.provider_key == "alysis":
2136
+ # Hosted credits meter the complete request. Shared upstream storage
2137
+ # must never be addressable by another Alysis account.
2138
+ supports_previous_response_id = False
2109
2139
  if continuation is not None and supports_previous_response_id:
2110
2140
  # With previous_response_id the API appends the sent input items to the
2111
2141
  # stored thread; system/developer messages from turn 1 are already
@@ -2175,6 +2205,10 @@ class OpenAIResponsesClient:
2175
2205
  payload["stream"] = True
2176
2206
  if self.provider_auth is not None:
2177
2207
  payload = self.provider_auth.adapt_responses_payload(payload)
2208
+ if self.provider_key == "alysis":
2209
+ payload["store"] = False
2210
+ payload["include"] = ["reasoning.encrypted_content"]
2211
+ payload.pop("temperature", None)
2178
2212
  if self._reasoning_summary_support_by_model.get(reasoning_summary_support_key) is False:
2179
2213
  _without_responses_reasoning_summary(payload)
2180
2214
  return payload
@@ -383,6 +383,30 @@ PROVIDER_PROTOCOL_CAPABILITIES: tuple[ProviderProtocolCapabilities, ...] = (
383
383
  reports_cache_write_tokens=True,
384
384
  quirks=("Native OpenAI Responses chat supports buffered and SSE streaming responses.",),
385
385
  ),
386
+ ProviderProtocolCapabilities(
387
+ provider_key="alysis",
388
+ protocol=OPENAI_RESPONSES_PROTOCOL,
389
+ reasoning_trace=ReasoningTraceCapability(
390
+ adapter="openai_responses_summary",
391
+ output_kind=ReasoningOutputKind.SUMMARY,
392
+ supports_streaming=True,
393
+ supports_buffered=True,
394
+ requestable=True,
395
+ continuation_state="opaque",
396
+ ),
397
+ usage_contract=UsageContract(
398
+ response_usage_confidence=UsageConfidence.AUTHORITATIVE,
399
+ input_token_count_strategy="none",
400
+ ),
401
+ supports_streaming=True,
402
+ supports_tool_calling=True,
403
+ supports_structured_outputs=True,
404
+ supports_provider_hosted_web_search_adapter=False,
405
+ default_web_search_adapter="none",
406
+ reports_cache_read_tokens=True,
407
+ reports_cache_write_tokens=True,
408
+ quirks=("Hosted Luna supports stateless text and function tools with shared credits.",),
409
+ ),
386
410
  ProviderProtocolCapabilities(
387
411
  provider_key="anthropic",
388
412
  protocol=OPENAI_COMPAT_PROTOCOL,
@@ -1577,6 +1577,22 @@ _OFFICIAL_PROVIDER_MODEL_METADATA["alysis"]["glm-5.3-flash"] = {
1577
1577
  "output_cost_per_token": 0.0000005,
1578
1578
  }
1579
1579
 
1580
+ _PROVIDER_CANONICAL_MODEL_IDS["alysis"]["gpt-6-luna"] = "gpt-6-luna"
1581
+ _OFFICIAL_PROVIDER_MODEL_SOURCES["alysis"]["gpt-6-luna"] = (
1582
+ "https://developers.openai.com/api/docs/models/gpt-6-luna",
1583
+ "https://developers.openai.com/api/docs/pricing",
1584
+ )
1585
+ _OFFICIAL_PROVIDER_MODEL_METADATA["alysis"]["gpt-6-luna"] = {
1586
+ "context_window_tokens": 1_050_000,
1587
+ "max_output_tokens": 128_000,
1588
+ "supports_vision": False,
1589
+ "supports_reasoning": True,
1590
+ "input_cost_per_token": 0.0000001,
1591
+ "cache_read_input_cost_per_token": 0.00000001,
1592
+ "cache_creation_input_cost_per_token": 0.000000125,
1593
+ "output_cost_per_token": 0.0000005,
1594
+ }
1595
+
1580
1596
  _BUILT_IN_MODEL_METADATA: dict[str, dict[str, Any]] = {
1581
1597
  "deepseek-chat": {
1582
1598
  "context_window_tokens": 1_000_000,
@@ -1767,8 +1767,10 @@ PROFILE_PRESETS: tuple[ProfilePreset, ...] = (
1767
1767
  model_choices=(
1768
1768
  ReviewedModel("deepseek-flash", "deepseek-expanded"),
1769
1769
  ReviewedModel("glm-5.3-flash", "glm-normal"),
1770
+ ReviewedModel("gpt-6-luna", "gpt-expanded"),
1770
1771
  ),
1771
1772
  suggested_model_descriptions={
1773
+ "gpt-6-luna": "GPT-6 Luna - efficient coding and reasoning, included with free credits",
1772
1774
  "deepseek-flash": (
1773
1775
  "DeepSeek V4.1 Flash - vision and reasoning, 1M context, included with free credits"
1774
1776
  ),
@@ -1785,7 +1787,7 @@ PROFILE_PRESETS: tuple[ProfilePreset, ...] = (
1785
1787
  "deepseek-v4.1-flash-expires-on-0910": "deepseek-flash",
1786
1788
  },
1787
1789
  setup_warning="Run `alysis login` to connect your Alysis account and use free credits.",
1788
- notes="DeepSeek V4.1 Flash and GLM 5.3 Flash with free credits. Authenticate with `alysis login`.",
1790
+ notes="DeepSeek V4.1 Flash, GLM 5.3 Flash, and GPT-6 Luna with free credits. Authenticate with `alysis login`.",
1789
1791
  ),
1790
1792
  ProfilePreset(
1791
1793
  key="ollama",
@@ -355,6 +355,17 @@ _CONTRACTS: dict[str, tuple[tuple[str, ReasoningContract], ...]] = {
355
355
  ),
356
356
  # Hosted models retain their upstream reasoning and replay contracts.
357
357
  "alysis": (
358
+ (
359
+ "gpt-6-luna",
360
+ _C(
361
+ mode=OPTIONAL,
362
+ wire=WIRE_REASONING_OBJECT,
363
+ values=("none", "low", "medium", "high", "xhigh", "max"),
364
+ default="medium",
365
+ off=OFF_EXPLICIT,
366
+ notes="hosted Responses with full stateless reasoning and function-tool replay",
367
+ ),
368
+ ),
358
369
  (
359
370
  "deepseek-",
360
371
  _C(
File without changes
File without changes
File without changes
File without changes