alysis-code 0.13.6.2__tar.gz → 0.13.8__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 (474) hide show
  1. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/PKG-INFO +11 -4
  2. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/README.md +8 -2
  3. alysis_code-0.13.8/docs/CHANGELOG.md +328 -0
  4. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/pyproject.toml +3 -2
  5. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/__init__.py +1 -1
  6. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/README.md +7 -6
  7. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/prompt_context.py +3 -11
  8. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/session.py +23 -40
  9. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/steering.py +66 -0
  10. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/tools_assembly.py +34 -7
  11. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/turn/core.py +66 -5
  12. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent_loop.py +1 -3
  13. alysis_code-0.13.8/src/alysis_code/cancellation.py +202 -0
  14. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/chat/__init__.py +0 -12
  15. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/chat/commands.py +110 -221
  16. alysis_code-0.13.8/src/alysis_code/cli_impl/chat/forge_visibility.py +35 -0
  17. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/chat/loop.py +385 -615
  18. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/chat/mid_turn_policy.py +39 -8
  19. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/chat/rendering.py +5 -63
  20. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/chat/state.py +3 -9
  21. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/chat_resume.py +21 -0
  22. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/chat_slash_completer.py +9 -6
  23. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/chat_state.py +2 -9
  24. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/chat_status.py +48 -101
  25. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/chat_terminal.py +1 -30
  26. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/cli_common.py +6 -32
  27. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/forge_helpers.py +0 -18
  28. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/prompt_helpers.py +7 -30
  29. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/startup.py +16 -26
  30. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/welcome.py +19 -30
  31. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/app.py +876 -236
  32. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/footer.py +11 -3
  33. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/setup_app.py +15 -12
  34. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/setup_flow.py +1 -1
  35. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/state.py +14 -19
  36. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/surface.py +39 -0
  37. alysis_code-0.13.8/src/alysis_code/cli_impl/tui/tips.py +35 -0
  38. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/compaction/tool_output_offload.py +8 -0
  39. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/config.py +2 -3
  40. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/feedback_report.py +262 -31
  41. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/host_browser.py +24 -1
  42. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/openai_compat.py +25 -0
  43. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/personas.py +2 -2
  44. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/surface/events.py +7 -7
  45. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/surface/rich_surface.py +2 -13
  46. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/git.py +114 -6
  47. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/registry.py +27 -4
  48. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/usage_tracker.py +13 -6
  49. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/verification_command_analysis.py +49 -0
  50. alysis_code-0.13.6.2/docs/CHANGELOG.md +0 -1639
  51. alysis_code-0.13.6.2/src/alysis_code/agentbox_client.py +0 -416
  52. alysis_code-0.13.6.2/src/alysis_code/agentbox_integration.py +0 -310
  53. alysis_code-0.13.6.2/src/alysis_code/assets/owl/index.html +0 -98
  54. alysis_code-0.13.6.2/src/alysis_code/cancellation.py +0 -53
  55. alysis_code-0.13.6.2/src/alysis_code/interactive_plan_mode.py +0 -26
  56. alysis_code-0.13.6.2/src/alysis_code/plan_mode.py +0 -393
  57. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/.gitignore +0 -0
  58. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/LICENSE +0 -0
  59. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/NOTICE +0 -0
  60. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/__main__.py +0 -0
  61. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/_build_info.py +0 -0
  62. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/account_login.py +0 -0
  63. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/__init__.py +0 -0
  64. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/acceptance_contract.py +0 -0
  65. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/blast_radius.py +0 -0
  66. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/cache_keepalive.py +0 -0
  67. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/completion_certificate.py +0 -0
  68. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/completion_gate.py +0 -0
  69. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/empty_response_stall.py +0 -0
  70. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/errors.py +0 -0
  71. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/llm_calls.py +0 -0
  72. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/mutation_classification.py +0 -0
  73. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/read_ledger.py +0 -0
  74. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/regression_baseline.py +0 -0
  75. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/reproduction_first.py +0 -0
  76. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/sensitive_output.py +0 -0
  77. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/subagent_execution.py +0 -0
  78. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/subagent_workspace.py +0 -0
  79. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/turn/__init__.py +0 -0
  80. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/turn/events.py +0 -0
  81. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/turn/exploration.py +0 -0
  82. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/turn/interventions.py +0 -0
  83. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/turn/read_cache.py +0 -0
  84. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/turn/snapshot.py +0 -0
  85. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/turn_contract.py +0 -0
  86. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/turn_path.py +0 -0
  87. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/verification.py +0 -0
  88. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/verification_commands.py +0 -0
  89. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent/verification_evidence.py +0 -0
  90. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent_runtimes/__init__.py +0 -0
  91. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent_runtimes/base.py +0 -0
  92. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent_runtimes/builtins.py +0 -0
  93. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent_runtimes/codex_cli.py +0 -0
  94. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent_runtimes/host.py +0 -0
  95. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent_runtimes/registry.py +0 -0
  96. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/agent_runtimes/service.py +0 -0
  97. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/alysis_cloud.py +0 -0
  98. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/approval_scope.py +0 -0
  99. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/README.md +0 -0
  100. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/__init__.py +0 -0
  101. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/asset_read_core.py +0 -0
  102. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/budget_allocator.py +0 -0
  103. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/comprehender.py +0 -0
  104. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/index.py +0 -0
  105. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/ingestion.py +0 -0
  106. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/legacy_migration.py +0 -0
  107. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/models.py +0 -0
  108. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/ocr.py +0 -0
  109. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-000.txt +0 -0
  110. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-001.txt +0 -0
  111. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-002.txt +0 -0
  112. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-003.txt +0 -0
  113. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-004.txt +0 -0
  114. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-005.txt +0 -0
  115. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-006.txt +0 -0
  116. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-007.txt +0 -0
  117. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-008.txt +0 -0
  118. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-009.txt +0 -0
  119. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-010.txt +0 -0
  120. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-011.txt +0 -0
  121. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-012.txt +0 -0
  122. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-013.txt +0 -0
  123. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-014.txt +0 -0
  124. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-015.txt +0 -0
  125. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-016.txt +0 -0
  126. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-017.txt +0 -0
  127. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-018.txt +0 -0
  128. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-019.txt +0 -0
  129. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/ascii/f-020.txt +0 -0
  130. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/owl/show-owl.sh +0 -0
  131. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/paths.py +0 -0
  132. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/plan_binding.py +0 -0
  133. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/planner_context.py +0 -0
  134. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/planner_tools.py +0 -0
  135. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/prompts.py +0 -0
  136. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/replanner_context.py +0 -0
  137. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/surface.py +0 -0
  138. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/untrusted_content.py +0 -0
  139. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/usage_logger.py +0 -0
  140. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/worker_mirror.py +0 -0
  141. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/worker_section.py +0 -0
  142. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/assets/worker_tools.py +0 -0
  143. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/atomic_io.py +0 -0
  144. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/auth_diagnostics.py +0 -0
  145. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/background_runner.py +0 -0
  146. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/branding.py +0 -0
  147. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/budget_policy.py +0 -0
  148. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/build_identity.py +0 -0
  149. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/builtin_hooks/__init__.py +0 -0
  150. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/builtin_hooks/notify_done_windows.py +0 -0
  151. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/bwrap_etc.py +0 -0
  152. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/capabilities.py +0 -0
  153. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/chatgpt_codex_static_provider.py +0 -0
  154. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli.py +0 -0
  155. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/__init__.py +0 -0
  156. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/assets_cli.py +0 -0
  157. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/assets_modal.py +0 -0
  158. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/__init__.py +0 -0
  159. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/_shared.py +0 -0
  160. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/auth.py +0 -0
  161. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/chat_resume_helpers.py +0 -0
  162. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/chat_tui_panels.py +0 -0
  163. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/cli_surface.py +0 -0
  164. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/config.py +0 -0
  165. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/conventions.py +0 -0
  166. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/execution_helpers.py +0 -0
  167. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/extensions.py +0 -0
  168. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/forge.py +0 -0
  169. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/forge_asset_view.py +0 -0
  170. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/hooks.py +0 -0
  171. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/ide_bridge.py +0 -0
  172. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/mcp.py +0 -0
  173. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/profile.py +0 -0
  174. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/report.py +0 -0
  175. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/root.py +0 -0
  176. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/sandbox.py +0 -0
  177. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/server.py +0 -0
  178. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/sessions.py +0 -0
  179. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/skills.py +0 -0
  180. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/tools.py +0 -0
  181. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/commands/update.py +0 -0
  182. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/config_menu.py +0 -0
  183. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/forge.py +0 -0
  184. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/forge_recovery.py +0 -0
  185. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/setup_wizard.py +0 -0
  186. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/__init__.py +0 -0
  187. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/config.py +0 -0
  188. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/config_flow.py +0 -0
  189. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/config_overlay.py +0 -0
  190. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/content.py +0 -0
  191. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/forge_status.py +0 -0
  192. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/markdown.py +0 -0
  193. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/owl.py +0 -0
  194. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/plan_meta.py +0 -0
  195. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/selection_bindings.py +0 -0
  196. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/subagent_identity.py +0 -0
  197. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/subagent_panel.py +0 -0
  198. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/transcript.py +0 -0
  199. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/update_prompt.py +0 -0
  200. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/cli_impl/tui/workspace_guard.py +0 -0
  201. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/clipboard.py +0 -0
  202. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/code_review.py +0 -0
  203. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/compaction/__init__.py +0 -0
  204. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/compaction/conversation_compactor.py +0 -0
  205. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/compaction/importance.py +0 -0
  206. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/compaction/settings.py +0 -0
  207. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/conflict_auto_resolver.py +0 -0
  208. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/context/__init__.py +0 -0
  209. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/context/tool_schema_budgeter.py +0 -0
  210. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/crash_diagnostics.py +0 -0
  211. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/custom_tools/README.md +0 -0
  212. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/custom_tools/__init__.py +0 -0
  213. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/custom_tools/discovery.py +0 -0
  214. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/custom_tools/runtime.py +0 -0
  215. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/custom_tools/session.py +0 -0
  216. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/custom_tools/trust.py +0 -0
  217. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/diff_paths.py +0 -0
  218. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/direction_change.py +0 -0
  219. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/dispatch_timing.py +0 -0
  220. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/durable_service_manager.py +0 -0
  221. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/edit_discipline.py +0 -0
  222. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/error_text.py +0 -0
  223. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/execution_budget.py +0 -0
  224. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/execution_context.py +0 -0
  225. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/execution_deadline.py +0 -0
  226. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/execution_shared.py +0 -0
  227. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/extensions/README.md +0 -0
  228. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/extensions/__init__.py +0 -0
  229. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/extensions/activation.py +0 -0
  230. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/extensions/install.py +0 -0
  231. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/extensions/manifest.py +0 -0
  232. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/extensions/models.py +0 -0
  233. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/extensions/paths.py +0 -0
  234. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/extensions/registry.json +0 -0
  235. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/extensions/registry.py +0 -0
  236. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/extensions/state.py +0 -0
  237. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/extensions/workspace_trust.py +0 -0
  238. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/failed_task_evidence.py +0 -0
  239. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/failure_category.py +0 -0
  240. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/file_classification.py +0 -0
  241. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/forge.py +0 -0
  242. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/forge_completion.py +0 -0
  243. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/forge_events.py +0 -0
  244. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/frontmatter_utils.py +0 -0
  245. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/git_evidence.py +0 -0
  246. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/git_ops.py +0 -0
  247. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/git_safe.py +0 -0
  248. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/git_worktrees.py +0 -0
  249. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/hooks/README.md +0 -0
  250. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/hooks/__init__.py +0 -0
  251. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/hooks/audit.py +0 -0
  252. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/hooks/config.py +0 -0
  253. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/hooks/dispatcher.py +0 -0
  254. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/hooks/models.py +0 -0
  255. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/hooks/trust.py +0 -0
  256. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/host_actions.py +0 -0
  257. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/__init__.py +0 -0
  258. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/activity_events.py +0 -0
  259. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/approvals.py +0 -0
  260. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/artifacts.py +0 -0
  261. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/browser_egress_proxy.py +0 -0
  262. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/cdp_websocket_transport.py +0 -0
  263. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/change_ledger.py +0 -0
  264. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/context_blocks.py +0 -0
  265. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/event_stream.py +0 -0
  266. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/forge_protocol.py +0 -0
  267. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/forge_request_ledger.py +0 -0
  268. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/health.py +0 -0
  269. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/managed_browser.py +0 -0
  270. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/management_protocol.py +0 -0
  271. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/mcp_oauth_coordinator.py +0 -0
  272. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/mcp_oauth_lifecycle.py +0 -0
  273. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/prompt_queue.py +0 -0
  274. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/protocol.py +0 -0
  275. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/resumable_swarm.py +0 -0
  276. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/session_search.py +0 -0
  277. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/stdio_bridge.py +0 -0
  278. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/structured_state.py +0 -0
  279. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/ide/swarm_protocol.py +0 -0
  280. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/integration_gate.py +0 -0
  281. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/interactive_input_guard.py +0 -0
  282. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/internal_artifacts.py +0 -0
  283. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/knowledge_base.py +0 -0
  284. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/knowledge_capture.py +0 -0
  285. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/knowledge_librarian.py +0 -0
  286. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/language_policy.py +0 -0
  287. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/litellm_static_provider.py +0 -0
  288. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/__init__.py +0 -0
  289. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/anthropic_messages.py +0 -0
  290. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/base.py +0 -0
  291. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/cache_capabilities.py +0 -0
  292. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/cache_control_blocks.py +0 -0
  293. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/cache_policy.py +0 -0
  294. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/factory.py +0 -0
  295. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/gemini_generate_content.py +0 -0
  296. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/gemini_interactions.py +0 -0
  297. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/metadata.py +0 -0
  298. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/openai_responses.py +0 -0
  299. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/protocols.py +0 -0
  300. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/provider_limits.py +0 -0
  301. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/request_plan.py +0 -0
  302. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/request_shape.py +0 -0
  303. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/streaming.py +0 -0
  304. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/temperature_compat.py +0 -0
  305. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/types.py +0 -0
  306. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm/usage_normalization.py +0 -0
  307. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/llm_error_display.py +0 -0
  308. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/logging_redaction.py +0 -0
  309. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/managed_host_deadline.py +0 -0
  310. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/README.md +0 -0
  311. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/__init__.py +0 -0
  312. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/client.py +0 -0
  313. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/config.py +0 -0
  314. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/errors.py +0 -0
  315. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/forge_scope.py +0 -0
  316. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/jsonrpc.py +0 -0
  317. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/manager.py +0 -0
  318. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/models.py +0 -0
  319. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/oauth.py +0 -0
  320. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/oauth_runtime.py +0 -0
  321. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/oauth_store.py +0 -0
  322. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/prompts.py +0 -0
  323. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/resources.py +0 -0
  324. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/roots.py +0 -0
  325. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/server_requests.py +0 -0
  326. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/token_store.py +0 -0
  327. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/transport_http.py +0 -0
  328. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/transport_stdio.py +0 -0
  329. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/mcp/untrusted_content.py +0 -0
  330. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/merge_conflict_reviewer.py +0 -0
  331. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/model_catalog/__init__.py +0 -0
  332. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/model_catalog/chatgpt_codex_subscription_snapshot.json +0 -0
  333. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.json +0 -0
  334. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.meta.json +0 -0
  335. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/model_metadata_policy.py +0 -0
  336. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/model_metadata_utils.py +0 -0
  337. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/model_registry.py +0 -0
  338. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/model_router.py +0 -0
  339. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/permission_policy.py +0 -0
  340. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/pipeline_facts.py +0 -0
  341. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/plan_assistant.py +0 -0
  342. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/plan_reconciliation.py +0 -0
  343. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/plan_repair.py +0 -0
  344. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/plan_validation.py +0 -0
  345. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/planning_constraints.py +0 -0
  346. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/policy.py +0 -0
  347. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/preview_server.py +0 -0
  348. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/process_reaping.py +0 -0
  349. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/profile_presets.py +0 -0
  350. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/profiles.py +0 -0
  351. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/provider_auth/__init__.py +0 -0
  352. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/provider_auth/base.py +0 -0
  353. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/provider_auth/openai_codex.py +0 -0
  354. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/provider_auth/registry.py +0 -0
  355. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/provider_auth/store.py +0 -0
  356. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/provider_diagnostics.py +0 -0
  357. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/provider_model_catalog.py +0 -0
  358. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/provider_telemetry.py +0 -0
  359. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/provider_url.py +0 -0
  360. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/reasoning_contracts.py +0 -0
  361. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/remote_sync.py +0 -0
  362. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/replanning.py +0 -0
  363. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/repo_scan.py +0 -0
  364. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/request_estimation.py +0 -0
  365. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/review_gate.py +0 -0
  366. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/run_lock.py +0 -0
  367. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/run_outcome.py +0 -0
  368. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/run_provenance.py +0 -0
  369. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/run_state.py +0 -0
  370. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/runtime_artifacts.py +0 -0
  371. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/runtime_context_features.py +0 -0
  372. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/runtime_kind.py +0 -0
  373. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/safety/__init__.py +0 -0
  374. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/safety/mcp_sanitize.py +0 -0
  375. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/safety/safe_http.py +0 -0
  376. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/safety/subagent_report.py +0 -0
  377. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/sandbox_doctor.py +0 -0
  378. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/sandbox_runner.py +0 -0
  379. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/sandbox_settings.py +0 -0
  380. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/serialized_paths.py +0 -0
  381. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/server/__init__.py +0 -0
  382. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/server/app.py +0 -0
  383. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/server/auth.py +0 -0
  384. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/server/job_config.py +0 -0
  385. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/server/settings.py +0 -0
  386. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/server/store.py +0 -0
  387. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/server/worker_runner.py +0 -0
  388. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/service_persistence.py +0 -0
  389. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/session_artifacts.py +0 -0
  390. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/session_metrics.py +0 -0
  391. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/session_store.py +0 -0
  392. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/README.md +0 -0
  393. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/__init__.py +0 -0
  394. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/bundled/address-pr-comments/SKILL.md +0 -0
  395. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/bundled/code-review/SKILL.md +0 -0
  396. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/bundled/commit/SKILL.md +0 -0
  397. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/bundled/debug/SKILL.md +0 -0
  398. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/bundled/fix-ci/SKILL.md +0 -0
  399. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/bundled/release-notes/SKILL.md +0 -0
  400. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/bundled/security-review/SKILL.md +0 -0
  401. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/bundled/skill-creator/SKILL.md +0 -0
  402. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/conventions.py +0 -0
  403. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/discovery.py +0 -0
  404. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/eval_models.py +0 -0
  405. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/eval_runner.py +0 -0
  406. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/evals.py +0 -0
  407. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/install.py +0 -0
  408. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/loader.py +0 -0
  409. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/matching.py +0 -0
  410. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/models.py +0 -0
  411. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/paths.py +0 -0
  412. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/prompting.py +0 -0
  413. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/scaffold.py +0 -0
  414. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/selection.py +0 -0
  415. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/state.py +0 -0
  416. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/transactions.py +0 -0
  417. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/skills/validation.py +0 -0
  418. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/step_budget.py +0 -0
  419. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/subagent_labels.py +0 -0
  420. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/subagents.py +0 -0
  421. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/surface/__init__.py +0 -0
  422. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/surface/base.py +0 -0
  423. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/surface/console.py +0 -0
  424. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/surface/hidden_surface.py +0 -0
  425. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/surface/noop_surface.py +0 -0
  426. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/surface/styles.py +0 -0
  427. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/surface/theme.py +0 -0
  428. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/surface/types.py +0 -0
  429. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/swarm_backend.py +0 -0
  430. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/swarm_orchestrator.py +0 -0
  431. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/swarm_scheduler.py +0 -0
  432. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/swarm_trace.py +0 -0
  433. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/swarm_worker.py +0 -0
  434. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/swarm_write_guard.py +0 -0
  435. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/task_dependencies.py +0 -0
  436. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/task_readiness.py +0 -0
  437. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/task_scope.py +0 -0
  438. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/terminal_manager.py +0 -0
  439. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/terminal_ownership.py +0 -0
  440. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/text_normalization.py +0 -0
  441. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/token_budget.py +0 -0
  442. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/README.md +0 -0
  443. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/__init__.py +0 -0
  444. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/artifacts.py +0 -0
  445. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/availability.py +0 -0
  446. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/fs.py +0 -0
  447. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/history.py +0 -0
  448. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/http_timeout.py +0 -0
  449. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/image_generation.py +0 -0
  450. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/repo_map.py +0 -0
  451. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/search.py +0 -0
  452. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/shell.py +0 -0
  453. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/symbols.py +0 -0
  454. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/test_discovery.py +0 -0
  455. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/web.py +0 -0
  456. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/web_search.py +0 -0
  457. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/web_search_dashscope.py +0 -0
  458. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/web_search_ddgs.py +0 -0
  459. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/web_search_provider_adapters.py +0 -0
  460. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/tools/web_search_tavily.py +0 -0
  461. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/transport_retry.py +0 -0
  462. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/updates.py +0 -0
  463. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/verification_contract.py +0 -0
  464. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/verification_failure_summary.py +0 -0
  465. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/verification_repair.py +0 -0
  466. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/verify_gate.py +0 -0
  467. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/web_research.py +0 -0
  468. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/web_search_adapters.py +0 -0
  469. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/web_search_policy.py +0 -0
  470. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/workspace_binding.py +0 -0
  471. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/workspace_binding_ui.py +0 -0
  472. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/workspace_context.py +0 -0
  473. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/workspace_isolation.py +0 -0
  474. {alysis_code-0.13.6.2 → alysis_code-0.13.8}/src/alysis_code/workspace_provisioning.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alysis-code
3
- Version: 0.13.6.2
4
- Summary: Local CLI coding agent powered by any API.
3
+ Version: 0.13.8
4
+ Summary: Open-source coding agent for hosted and local models.
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
7
7
  Project-URL: Funding, https://github.com/sponsors/AlysisAi
@@ -37,6 +37,7 @@ Requires-Dist: pillow>=12.3.0
37
37
  Requires-Dist: platformdirs>=4.2.0
38
38
  Requires-Dist: prompt-toolkit>=3.0.43
39
39
  Requires-Dist: pydantic>=2.6.0
40
+ Requires-Dist: pygments<3.0.0,>=2.17.0
40
41
  Requires-Dist: rich>=13.7.1
41
42
  Requires-Dist: tiktoken>=0.7.0
42
43
  Requires-Dist: typer>=0.12.0
@@ -151,8 +152,10 @@ sandbox only when explicitly configured with `verify_sandbox.mode="off"` or
151
152
 
152
153
  Two layers control what the agent may do — one enforces, one focuses.
153
154
 
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>`:
155
+ **Execution modes** are the enforcement layer. Choose one per command with `--mode`, select the
156
+ next message's permissions with `/permissions` or **Shift+Tab**, or set a default with
157
+ `alysis-code config set default_mode <mode>`. A selection leaves the active turn's permissions
158
+ unchanged until the next message starts:
156
159
 
157
160
  | Mode | Behavior |
158
161
  | --- | --- |
@@ -175,6 +178,10 @@ A persona is a convention, never a permission: it can keep or lower your executi
175
178
  never raise it. Define your own in `.alysis_personas/*.md`.
176
179
  [Learn more](https://alysiscode.com/docs/concepts/personas)
177
180
 
181
+ Use `/persona architect` for planning in chat, or `/forge` for a plan-driven execution workflow.
182
+ The legacy chat Plan Mode and its `/plan` commands have been removed; Forge retains its plan views
183
+ and editor. Persona changes made during a running turn apply after that turn finishes.
184
+
178
185
  ## Project Links
179
186
 
180
187
  - [Website](https://alysiscode.com/)
@@ -93,8 +93,10 @@ sandbox only when explicitly configured with `verify_sandbox.mode="off"` or
93
93
 
94
94
  Two layers control what the agent may do — one enforces, one focuses.
95
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>`:
96
+ **Execution modes** are the enforcement layer. Choose one per command with `--mode`, select the
97
+ next message's permissions with `/permissions` or **Shift+Tab**, or set a default with
98
+ `alysis-code config set default_mode <mode>`. A selection leaves the active turn's permissions
99
+ unchanged until the next message starts:
98
100
 
99
101
  | Mode | Behavior |
100
102
  | --- | --- |
@@ -117,6 +119,10 @@ A persona is a convention, never a permission: it can keep or lower your executi
117
119
  never raise it. Define your own in `.alysis_personas/*.md`.
118
120
  [Learn more](https://alysiscode.com/docs/concepts/personas)
119
121
 
122
+ Use `/persona architect` for planning in chat, or `/forge` for a plan-driven execution workflow.
123
+ The legacy chat Plan Mode and its `/plan` commands have been removed; Forge retains its plan views
124
+ and editor. Persona changes made during a running turn apply after that turn finishes.
125
+
120
126
  ## Project Links
121
127
 
122
128
  - [Website](https://alysiscode.com/)
@@ -0,0 +1,328 @@
1
+ # Changelog
2
+
3
+ Notable user-facing changes to Alysis Code are recorded here. This project follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and uses
5
+ [Semantic Versioning](https://semver.org/spec/v2.0.0.html) while the public API remains pre-1.0.
6
+
7
+ ## [Unreleased]
8
+
9
+ No user-facing changes yet.
10
+
11
+ ## [0.13.8] - 2026-09-16
12
+
13
+ ### Changed
14
+
15
+ - Remove legacy chat Plan Mode, its draft/approve flow, and its prompts and toolbar
16
+ state. Use the Architect persona for planning in chat; Forge retains its plan views
17
+ and editor.
18
+ - Replace `/mode` with `/permissions`. Permission selections and Shift+Tab apply to
19
+ the next user message, with the pending choice visible beside the active permissions.
20
+ - Apply persona changes and approved persona-switch proposals only after the active
21
+ turn finishes. Preserve pending permission selections when resuming a conversation.
22
+ - Show pending steering messages and queued follow-ups. Shift+Left recalls the newest
23
+ queued message for editing. Interruptions preserve undelivered work and wait for the
24
+ current worker to finish before another turn starts.
25
+ - Read large Git diffs in complete pages with a content identifier that detects
26
+ changes between pages. The agent can select a path or inspect staged changes.
27
+ - Allow a background-process wait of up to 900 seconds, bounded by the remaining
28
+ run budget and returning early when its requested condition is met.
29
+ - Explain how to correct rejected verification commands, including how to use the
30
+ session's configured verification contract.
31
+
32
+ ### Fixed
33
+
34
+ - Keep plain assistant replies in conversation history so follow-up requests retain
35
+ the previous answer even when the provider returns no extra metadata.
36
+ - Redact credential fields inside nested JSON, tool arguments, feedback text, and
37
+ support bundles. Omit data that exceeds the safe redaction depth and non-UTF-8
38
+ diagnostic artifacts that cannot be sanitized reliably.
39
+ - Clean up incomplete support bundles after cancellation or I/O errors, support long
40
+ Windows export paths, and open report drafts without disrupting terminal output.
41
+ - Inspect Git changes without running configured diff programs, text converters,
42
+ filesystem monitors, or content filters. Worktree reads that require content
43
+ filters or submodule helpers return guidance for an approved shell command;
44
+ staged diffs and unaffected scoped paths remain available.
45
+ - Preserve hosted-account explanations for rolling usage limits, concurrent requests,
46
+ reserved credits, and temporary routing or capacity problems.
47
+
48
+ ## [0.13.7] - 2026-09-11
49
+
50
+ ### Added
51
+
52
+ - Rotating usage tips above the chat input while the agent works, with clickable links.
53
+ Tips hide during dialogs and stay out of conversation history.
54
+
55
+ ### Changed
56
+
57
+ - The context footer shows remaining conversation space after startup prompts and tools.
58
+ Provider measurements and calibrated estimates inform the gauge, while capacity warnings
59
+ continue to use the full request budget.
60
+ - Ctrl+J is the multiline input shortcut; Enter submits. The Alt+Enter alias is removed.
61
+ - Updated public documentation and contributor guidance.
62
+
63
+ ### Fixed
64
+
65
+ - Setup continuation hints stay visible above the footer on small terminals and long screens.
66
+ - Benchmark wheel builds preserve local build metadata and existing build artifacts, including
67
+ when a build fails or is interrupted.
68
+
69
+ ## [0.13.6.2] - 2026-09-08
70
+
71
+ ### Fixed
72
+
73
+ - **Alysis Code account setup and configuration use subscription controls.**
74
+ Setup identifies the Alysis Code endpoint without the retired MiMo label.
75
+ Hosted profiles show Alysis Code subscription access and account sign-in,
76
+ reconnect, and disconnect controls instead of an API-key editor.
77
+ - **Hosted model changes no longer ask for a base URL.** The managed endpoint
78
+ stays in place through model selection and back navigation. Custom and BYOK
79
+ providers keep their endpoint settings.
80
+ - **Switching to an Alysis Code account keeps the correct connection.** Signing
81
+ in refreshes the full active profile before configuration is saved, preventing
82
+ the previous provider's URL from overwriting the hosted endpoint. Login also
83
+ switches back to the native agent from a selected delegated runtime. Account
84
+ status reflects the Alysis login, including after logout when an unrelated
85
+ provider key is still saved.
86
+
87
+ ## [0.13.6.1] - 2026-09-08
88
+
89
+ ### Fixed
90
+
91
+ - **V4.1 Flash beta on Alysis Code Pro.** The Pro model picker now includes
92
+ `deepseek-v4.1-flash-expires-on-0910` and `deepseek-v4-flash-vision-exp`
93
+ with descriptions. Newly discovered models are captioned "available on your
94
+ Alysis Code Pro plan" instead of the retired MiMo "trial" wording.
95
+
96
+ ## [0.13.6] - 2026-09-08
97
+
98
+ ### Added
99
+
100
+ - **DeepSeek V4.1 Flash internal beta.** `deepseek-v4.1-flash-expires-on-0910`
101
+ (announced 2026-09-08) is now on the DeepSeek preset menu. It is a
102
+ new-architecture model with native multimodal input, served on the unchanged
103
+ `https://api.deepseek.com` base URL under a temporary id that stops resolving
104
+ on 2026-09-10; DeepSeek bills it at the `deepseek-v4-flash` rate and caps
105
+ accounts at 20 concurrent requests. Registry metadata assumes the V4 Flash
106
+ shape (1M context, 384K output, vision, thinking `low|high|max`) until
107
+ DeepSeek publishes the GA id and limits. `deepseek-v4-pro` stays the default.
108
+
109
+ ### Changed
110
+
111
+ - **DeepSeek footer labels follow vendor spelling.** Names now appear as
112
+ `DeepSeek-V4-Pro` and `DeepSeek-V4.1-Flash`; dated beta ids omit their
113
+ `-expires-on-<date>` suffix from the displayed label.
114
+
115
+ ## [0.13.5] - 2026-09-07
116
+
117
+ ### Added
118
+
119
+ - Ship eight bundled workflow skills: `address-pr-comments`, `code-review`,
120
+ `commit`, `debug`, `fix-ci`, `release-notes`, `security-review`, and `skill-creator`.
121
+ - Select a relevant skill automatically with a bounded, reasoning-off model call;
122
+ read its instructions before other task tools, with ordinary routing as fallback.
123
+ - Invoke skills with `$<name> [task]` at an idle chat prompt, with live completion
124
+ and one-turn attachment. `/skill` remains supported.
125
+ - Add `bundled_skills_enabled` configuration, project and user override precedence,
126
+ and model-in-loop bundled workflow evaluations with launch-readiness checks.
127
+
128
+ ### Fixed
129
+
130
+ - Harden skill instruction boundaries, selection ordering, and per-turn cleanup.
131
+ - Preserve resolved skill settings in child agents and restore slash completion.
132
+ - Recognize silent and inline verification results and preserve authoritative
133
+ verification evidence when supplemental checks run.
134
+ - Bound stalled OpenAI-compatible and Responses streams, including traffic that
135
+ contains no meaningful progress.
136
+
137
+ ## [0.13.4] - 2026-09-05
138
+
139
+ Model-catalog and TUI-access refresh.
140
+
141
+ ### Added
142
+
143
+ - Added GPT-6 Astra as the default OpenAI model, with aliases, pricing, context-window,
144
+ reasoning, OpenRouter, and ChatGPT-subscription metadata.
145
+ - Added newly available first-party and gateway routes for Claude Fable 5.1, Gemini 3.8
146
+ Flash, Qwen 3.8, GLM-5.3, Kimi K3, Doubao Seed 2.1, DeepSeek V4 snapshots, Grok 4.6,
147
+ and related hosted variants.
148
+
149
+ ### Changed
150
+
151
+ - Refreshed every hosted preset's model picker, aliases, validation model, retirement
152
+ mappings, pricing, context limits, and reasoning contracts against provider catalogs.
153
+ - Updated TUI model labels to preserve vendor naming and made profile pickers show each
154
+ profile's model, host, active state, retired-model state, and duplicates.
155
+ - Migrated the Perplexity preset from the retiring Sonar Chat Completions endpoint to the
156
+ Agent API, including hosted web search and saved-profile migration.
157
+ - Replaced the OpenAI economy and validation model with GPT-5.6 Luna and kept
158
+ GPT-5.3 Codex limited to the Responses preset.
159
+
160
+ ### Fixed
161
+
162
+ - OpenAI Chat Completions now uses `max_completion_tokens` for GPT-5 and newer models.
163
+ - Native Gemini tool and response schemas are projected onto Gemini's supported OpenAPI
164
+ subset before requests are sent.
165
+
166
+ ## [0.13.3] - 2026-08-28
167
+
168
+ ### Fixed
169
+
170
+ - Restored the Ubuntu Python 3.11 and 3.12 CI jobs after the repository cleanup by aligning Ruff
171
+ formatting, updating moved sandbox contract paths, preserving the security-documentation
172
+ contract, making immediate shell-output coverage independent of thread scheduling, and allowing
173
+ harmless floating-point clock precision in deadline coverage.
174
+
175
+ ## [0.13.2] - 2026-08-28
176
+
177
+ Public launch and repository-layout refresh.
178
+
179
+ ### Added
180
+
181
+ - A theme-adaptive README banner with dedicated light and dark artwork.
182
+ - `alysis-code` as the canonical executable, while retaining `alysis` as the short alias.
183
+
184
+ ### Changed
185
+
186
+ - Simplified the public README around installation, core capabilities, modes, and documentation.
187
+ - Moved governance files under `.github/`, release and changelog documents under `docs/`, and
188
+ sandbox and benchmark sources under `scripts/` for a cleaner repository root.
189
+ - Legacy Sylliptor environment and command compatibility now forwards silently while retaining
190
+ diagnostic logging for support.
191
+
192
+ ### Fixed
193
+
194
+ - Device-login approval URLs now remain pinned to the configured Alysis site instead of trusting
195
+ a backend-provided origin.
196
+
197
+ ## [0.13.1] - 2026-08-27
198
+
199
+ ### Fixed
200
+
201
+ - Kept terminal input, selection, scrolling, paste hints, and theme behavior consistent across
202
+ chat and configuration screens.
203
+ - Made intentional clean stops exit successfully while preserving non-zero exits for genuine
204
+ failures and unknown stop reasons.
205
+ - Added bounded retries for connections interrupted during a response, with consistent deadline
206
+ and diagnostic reporting.
207
+
208
+ ## [0.13.0] - 2026-08-26
209
+
210
+ ### Changed
211
+
212
+ - Renamed Sylliptor to Alysis Code. The package is now `alysis-code`, the command is `alysis`, and
213
+ the Python module is `alysis_code`.
214
+ - Preserved the deprecated `sylliptor` command and migration support for existing configuration,
215
+ credentials, plugins, and project directories. See the [migration guide](migration-alysis-code.md).
216
+ - Improved run-budget handling, deadline-aware shell waits, persistent services, edit diagnostics,
217
+ sampling controls, and build provenance.
218
+
219
+ ### Security
220
+
221
+ - Added redaction at log and telemetry write boundaries for credential-shaped values.
222
+
223
+ ## [0.12.0] - 2026-08-18
224
+
225
+ ### Added
226
+
227
+ - Added Code, Architect, Ask, and Debug personas.
228
+ - Added provider-neutral Terminal-Bench and Harbor adapters.
229
+ - Added deterministic release builds, dependency auditing, SBOM generation, and provenance
230
+ attestations.
231
+
232
+ ### Changed
233
+
234
+ - Improved evidence-based finalization, blocker reporting, provider authentication, model
235
+ discovery, context management, and verification repair.
236
+ - Strengthened boundaries around credentials, protected paths, filesystem access, and sensitive
237
+ tool output.
238
+
239
+ ## [0.11.2] - 2026-07-27
240
+
241
+ ### Added
242
+
243
+ - Added route arbitration, turn-contract enforcement, regression baselines, and evidence-backed
244
+ completion checks.
245
+ - Added tracked process cleanup, workspace provisioning, incomplete-subagent containment, and new
246
+ Moonshot/Kimi model presets.
247
+ - Added a master switch for web tools and search backends.
248
+
249
+ ### Changed
250
+
251
+ - Refreshed the ChatGPT subscription model catalog and provider-reported final-answer handling.
252
+
253
+ ## [0.11.1] - 2026-07-20
254
+
255
+ ### Changed
256
+
257
+ - Redesigned the interactive configuration screen with grouped settings, clearer summaries, and
258
+ improved provider and model selection.
259
+ - Added provider-specific reasoning controls and clearer per-role model overrides.
260
+
261
+ ### Fixed
262
+
263
+ - Applied configuration changes made before the first message without restarting the terminal UI.
264
+ - Corrected input-budget calculations for shared-window models.
265
+
266
+ ## [0.11.0] - 2026-07-18
267
+
268
+ ### Added
269
+
270
+ - Added specialist subagent roles and capability-aware delegation.
271
+ - Added live subagent progress and result attribution to the terminal UI.
272
+ - Added an opt-in visual designer for image generation.
273
+
274
+ ### Security
275
+
276
+ - Constrained child tools, execution modes, deadlines, and result handling so delegated output
277
+ cannot change parent authority or permissions.
278
+
279
+ ## [0.10.0] - 2026-07-13
280
+
281
+ ### Added
282
+
283
+ - Added ChatGPT Codex subscription login, encrypted refreshable credentials, and live model
284
+ discovery.
285
+ - Added DDGS web search as a keyless fallback and expanded hosted search support.
286
+ - Added repository mapping, focused test discovery, cached update prompts, and safer workspace
287
+ previews.
288
+
289
+ ### Changed
290
+
291
+ - Improved provider-aware prompt caching, usage accounting, terminal navigation, Forge planning,
292
+ and OpenAI Responses streaming recovery.
293
+
294
+ ## [0.9.8] - 2026-06-29
295
+
296
+ ### Added
297
+
298
+ - Added stronger completion contracts and verification evidence for one-shot and managed tasks.
299
+ - Added shell waiting, durable service tools, and stricter web-fetch provenance.
300
+
301
+ ### Changed
302
+
303
+ - Improved Forge verification, runtime deadlines, provider adapters, usage tracking, and recovery
304
+ from unknown tool calls.
305
+
306
+ ## Earlier releases
307
+
308
+ Release notes for versions before 0.9.8 remain available in the
309
+ [GitHub Releases archive](https://github.com/AlysisAi/alysis-code/releases).
310
+
311
+ [Unreleased]: https://github.com/AlysisAi/alysis-code/compare/v0.13.8...HEAD
312
+ [0.13.8]: https://github.com/AlysisAi/alysis-code/compare/v0.13.7...v0.13.8
313
+ [0.13.7]: https://github.com/AlysisAi/alysis-code/compare/v0.13.6.2...v0.13.7
314
+ [0.13.6.2]: https://github.com/AlysisAi/alysis-code/compare/v0.13.6.1...v0.13.6.2
315
+ [0.13.6.1]: https://github.com/AlysisAi/alysis-code/compare/v0.13.6...v0.13.6.1
316
+ [0.13.6]: https://github.com/AlysisAi/alysis-code/compare/v0.13.5...v0.13.6
317
+ [0.13.5]: https://github.com/AlysisAi/alysis-code/compare/v0.13.4...v0.13.5
318
+ [0.13.4]: https://github.com/AlysisAi/alysis-code/compare/v0.13.3...v0.13.4
319
+ [0.13.3]: https://github.com/AlysisAi/alysis-code/compare/v0.13.2...v0.13.3
320
+ [0.13.2]: https://github.com/AlysisAi/alysis-code/compare/v0.13.1...v0.13.2
321
+ [0.13.1]: https://github.com/AlysisAi/alysis-code/compare/v0.13.0...v0.13.1
322
+ [0.13.0]: https://github.com/AlysisAi/alysis-code/compare/v0.12.0...v0.13.0
323
+ [0.12.0]: https://github.com/AlysisAi/alysis-code/compare/v0.11.2...v0.12.0
324
+ [0.11.2]: https://github.com/AlysisAi/alysis-code/compare/v0.11.1...v0.11.2
325
+ [0.11.1]: https://github.com/AlysisAi/alysis-code/compare/v0.11.0...v0.11.1
326
+ [0.11.0]: https://github.com/AlysisAi/alysis-code/compare/v0.10.0...v0.11.0
327
+ [0.10.0]: https://github.com/AlysisAi/alysis-code/compare/v0.9.8...v0.10.0
328
+ [0.9.8]: https://github.com/AlysisAi/alysis-code/releases/tag/v0.9.8
@@ -4,8 +4,8 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "alysis-code"
7
- version = "0.13.6.2"
8
- description = "Local CLI coding agent powered by any API."
7
+ version = "0.13.8"
8
+ description = "Open-source coding agent for hosted and local models."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
11
11
  license = { text = "Apache-2.0" }
@@ -44,6 +44,7 @@ dependencies = [
44
44
  "platformdirs>=4.2.0",
45
45
  "pydantic>=2.6.0",
46
46
  "prompt-toolkit>=3.0.43",
47
+ "pygments>=2.17.0,<3.0.0",
47
48
  "rich>=13.7.1",
48
49
  "tiktoken>=0.7.0",
49
50
  "typer>=0.12.0",
@@ -1,3 +1,3 @@
1
1
  __all__ = ["__version__"]
2
2
 
3
- __version__ = "0.13.6.2"
3
+ __version__ = "0.13.8"
@@ -5,14 +5,15 @@ managed execution flows.
5
5
 
6
6
  ## Contents
7
7
 
8
- - `session.py` builds session state from configuration, workspace context, and
8
+ - [session.py](session.py) builds session state from configuration, workspace context, and
9
9
  runtime kind.
10
- - `tools_assembly.py` builds the concrete tool surface for a session.
11
- - `turn.py` runs the turn loop and tool-call iteration.
12
- - `routing.py` handles routing and final response shaping.
13
- - `prompt_context.py` prepares workspace, convention, skill, plugin, and
10
+ - [tools_assembly.py](tools_assembly.py) builds the concrete tool surface for a session.
11
+ - [turn/core.py](turn/core.py) runs the turn loop and tool-call iteration.
12
+ - [turn_path.py](turn_path.py) defines execution posture and reply-language directives.
13
+ - [prompt_context.py](prompt_context.py) prepares workspace, convention, skill, plugin, and
14
14
  verification context.
15
- - `verification.py` and `verification_commands.py` support verification flows.
15
+ - [verification.py](verification.py) and [verification_commands.py](verification_commands.py)
16
+ support verification flows.
16
17
 
17
18
  ## Scope
18
19
 
@@ -22,7 +22,6 @@ from ..extensions.activation import (
22
22
  from ..extensions.models import normalize_extension_id, plugin_slug_from_id
23
23
  from ..extensions.state import load_global_state, load_project_state
24
24
  from ..personas import DEFAULT_PERSONA, normalize_persona, persona_modes_enabled
25
- from ..plan_mode import extract_approved_plan_user_message
26
25
  from ..repo_scan import (
27
26
  _MANIFEST_SPECS,
28
27
  _README_NAMES,
@@ -1460,10 +1459,7 @@ def _build_repo_task_brief_message(
1460
1459
  }:
1461
1460
  return None
1462
1461
 
1463
- clean = (
1464
- extract_approved_plan_user_message(pending_instruction)
1465
- or str(pending_instruction or "").strip()
1466
- )
1462
+ clean = str(pending_instruction or "").strip()
1467
1463
  if not clean or _is_host_managed_user_context_message(clean):
1468
1464
  return None
1469
1465
  if clean[:1] in {"/", ":"} and "\n" not in clean:
@@ -1828,11 +1824,10 @@ def refresh_session_task_brief_from_observed_turn(
1828
1824
  return False
1829
1825
  messages_obj, existing_index, current_content, inserted_placeholder = ensured
1830
1826
 
1831
- approved_plan_message = extract_approved_plan_user_message(instruction)
1832
- if not approved_plan_message and material_edit_count <= 0:
1827
+ if material_edit_count <= 0:
1833
1828
  return inserted_placeholder
1834
1829
 
1835
- clean = approved_plan_message or str(instruction or "").strip()
1830
+ clean = str(instruction or "").strip()
1836
1831
  if not clean or _is_host_managed_user_context_message(clean):
1837
1832
  return inserted_placeholder
1838
1833
  if clean[:1] in {"/", ":"} and "\n" not in clean:
@@ -2090,9 +2085,6 @@ def _build_user_message(
2090
2085
  image_paths: list[str] | None,
2091
2086
  ) -> tuple[dict[str, Any], dict[str, Any]]:
2092
2087
  log_payload: dict[str, Any] = {"content": instruction}
2093
- display_content = extract_approved_plan_user_message(instruction)
2094
- if display_content and display_content != instruction:
2095
- log_payload["display_content"] = display_content
2096
2088
  if not image_paths:
2097
2089
  return {"role": "user", "content": instruction}, log_payload
2098
2090
 
@@ -17,7 +17,6 @@ from typing import TYPE_CHECKING, Any
17
17
 
18
18
  from .. import __version__
19
19
  from ..agent import _patchable
20
- from ..agentbox_integration import AgentBoxTelemetry
21
20
  from ..background_runner import (
22
21
  DisabledBackgroundRunner,
23
22
  LazyBackgroundShellRunner,
@@ -549,11 +548,11 @@ class AgentSession:
549
548
  one_shot_execution: bool = False
550
549
  # Persona mode (code|architect|ask|debug). A convention layered on the
551
550
  # execution-mode gate, never an enforcement layer; "code" is the no-op
552
- # persona. See docs/persona_modes_design.md.
551
+ # persona. See docs/personas.md.
553
552
  persona: str = "code"
554
553
  # The user's chosen execution mode remembered while a narrowing persona
555
554
  # (architect/ask) is active, so switching back to code/debug restores it.
556
- # None when the active persona narrows nothing. An explicit /mode <exec>
555
+ # None when the active persona narrows nothing. An explicit /permissions <exec>
557
556
  # always wins and clears the restore point (and restores the write scope).
558
557
  persona_restore_mode: str | None = None
559
558
  # The user's base allow_write_globs snapshotted alongside
@@ -629,7 +628,6 @@ class AgentSession:
629
628
  cache_keepalive: ParentCacheKeepalive | None = None
630
629
  crash_diagnostics: CrashDiagnosticLogger | None = None
631
630
  crash_diagnostic_log_path: str | None = None
632
- agentbox_telemetry: AgentBoxTelemetry | None = None
633
631
  process_group_registry: ProcessGroupRegistry | None = None
634
632
  # Empty-response handling is budgeted per session, not per turn: two failed
635
633
  # recovery cycles mean the endpoint is not answering, and re-spending the
@@ -840,8 +838,6 @@ class AgentSession:
840
838
  if self.mcp_manager is not None:
841
839
  self.mcp_manager.close()
842
840
  finally:
843
- if self.agentbox_telemetry is not None:
844
- self.agentbox_telemetry.close(error=reason not in {"session_close", "completed"})
845
841
  self.store.close()
846
842
 
847
843
  def _hook_warning(self, message: str, *, code: str = "hook_warning") -> None:
@@ -1154,8 +1150,6 @@ class AgentSession:
1154
1150
  persistent_has_media=request_contains_media(self.messages),
1155
1151
  )
1156
1152
  self.store.append("llm_usage", usage_record.to_payload())
1157
- if self.agentbox_telemetry is not None:
1158
- self.agentbox_telemetry.record_usage(usage_record)
1159
1153
  return usage_record
1160
1154
  except Exception as exc: # noqa: BLE001 -- accounting cannot break the agent turn
1161
1155
  self.store.append(
@@ -1298,15 +1292,21 @@ class AgentSession:
1298
1292
  )
1299
1293
  if rewrite_payload is not None:
1300
1294
  self.store.append("final_summary_rewrite", rewrite_payload)
1301
- assistant_message = None
1295
+ # Keep ordinary text replies in history so follow-up requests retain the
1296
+ # assistant turn even when the provider supplies no opaque metadata.
1297
+ assistant_message = (
1298
+ None if internal_fallback else {"role": "assistant", "content": emitted_text}
1299
+ )
1302
1300
  if assistant_response is not None:
1303
- candidate_message = assistant_message_from_response(
1301
+ assistant_message = assistant_message_from_response(
1304
1302
  assistant_response,
1305
1303
  content=emitted_text,
1306
1304
  )
1307
- if PROVIDER_METADATA_KEY in candidate_message:
1308
- assistant_message = candidate_message
1309
- extra_payload = {"message": assistant_message} if assistant_message is not None else None
1305
+ extra_payload = (
1306
+ {"message": assistant_message}
1307
+ if assistant_message is not None and PROVIDER_METADATA_KEY in assistant_message
1308
+ else None
1309
+ )
1310
1310
  if internal_fallback and self.subagent_depth > 0:
1311
1311
  # A nested run's locally generated stop report is internal state. The
1312
1312
  # nested surface forwards assistant messages up to the parent's panel,
@@ -1709,29 +1709,16 @@ class AgentSession:
1709
1709
  self._turn_owner_thread_id = turn_thread_id
1710
1710
  self._bind_provider_retry_observer(self.client)
1711
1711
  try:
1712
- if self.agentbox_telemetry is None:
1713
- return _run_turn(
1714
- self,
1715
- instruction,
1716
- image_paths=image_paths,
1717
- routing_mode_override=routing_mode_override,
1718
- ephemeral_system_messages=ephemeral_system_messages,
1719
- ephemeral_user_messages=ephemeral_user_messages,
1720
- cancellation_token=cancellation_token,
1721
- chat_only=chat_only,
1722
- )
1723
- self.agentbox_telemetry.task(instruction)
1724
- with self.agentbox_telemetry.turn():
1725
- return _run_turn(
1726
- self,
1727
- instruction,
1728
- image_paths=image_paths,
1729
- routing_mode_override=routing_mode_override,
1730
- ephemeral_system_messages=ephemeral_system_messages,
1731
- ephemeral_user_messages=ephemeral_user_messages,
1732
- cancellation_token=cancellation_token,
1733
- chat_only=chat_only,
1734
- )
1712
+ return _run_turn(
1713
+ self,
1714
+ instruction,
1715
+ image_paths=image_paths,
1716
+ routing_mode_override=routing_mode_override,
1717
+ ephemeral_system_messages=ephemeral_system_messages,
1718
+ ephemeral_user_messages=ephemeral_user_messages,
1719
+ cancellation_token=cancellation_token,
1720
+ chat_only=chat_only,
1721
+ )
1735
1722
  except CooperativeCancellationError as exc:
1736
1723
  # The budget watchdog cancels through the same cooperative channel a
1737
1724
  # user does, so the two are told apart by reason. A budget stop is a
@@ -3234,10 +3221,6 @@ def create_session(
3234
3221
  execution_deadline=execution_deadline,
3235
3222
  crash_diagnostics=crash_diagnostics,
3236
3223
  crash_diagnostic_log_path=resolved_crash_diagnostic_log_path,
3237
- agentbox_telemetry=AgentBoxTelemetry.from_env(
3238
- root=root,
3239
- runtime_version=f"alysis-{__version__}",
3240
- ),
3241
3224
  process_group_registry=process_group_registry,
3242
3225
  )
3243
3226
  if subagent_depth == 0 and store.enabled: