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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. {alysis_code-0.13.4 → alysis_code-0.13.6}/PKG-INFO +1 -1
  2. {alysis_code-0.13.4 → alysis_code-0.13.6}/docs/CHANGELOG.md +41 -0
  3. {alysis_code-0.13.4 → alysis_code-0.13.6}/pyproject.toml +1 -1
  4. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/__init__.py +1 -1
  5. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/acceptance_contract.py +30 -2
  6. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/prompt_context.py +7 -2
  7. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/reproduction_first.py +3 -0
  8. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/session.py +53 -2
  9. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/subagent_execution.py +7 -0
  10. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/tools_assembly.py +2 -0
  11. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/turn/core.py +513 -10
  12. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/verification.py +47 -41
  13. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cancellation.py +12 -0
  14. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/chat/commands.py +48 -0
  15. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/chat/loop.py +87 -11
  16. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/chat_slash_completer.py +24 -6
  17. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/skills.py +10 -4
  18. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/welcome.py +1 -0
  19. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/content.py +18 -5
  20. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/config.py +12 -0
  21. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/execution_budget.py +2 -0
  22. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/management_protocol.py +5 -1
  23. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/factory.py +2 -0
  24. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/openai_compat.py +182 -144
  25. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/openai_responses.py +122 -16
  26. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/provider_limits.py +6 -0
  27. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/streaming.py +67 -0
  28. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/model_registry.py +23 -0
  29. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/profile_presets.py +8 -1
  30. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/README.md +5 -2
  31. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/__init__.py +31 -1
  32. alysis_code-0.13.6/src/alysis_code/skills/bundled/address-pr-comments/SKILL.md +19 -0
  33. alysis_code-0.13.6/src/alysis_code/skills/bundled/code-review/SKILL.md +18 -0
  34. alysis_code-0.13.6/src/alysis_code/skills/bundled/commit/SKILL.md +19 -0
  35. alysis_code-0.13.6/src/alysis_code/skills/bundled/debug/SKILL.md +18 -0
  36. alysis_code-0.13.6/src/alysis_code/skills/bundled/fix-ci/SKILL.md +20 -0
  37. alysis_code-0.13.6/src/alysis_code/skills/bundled/release-notes/SKILL.md +19 -0
  38. alysis_code-0.13.6/src/alysis_code/skills/bundled/security-review/SKILL.md +18 -0
  39. alysis_code-0.13.6/src/alysis_code/skills/bundled/skill-creator/SKILL.md +19 -0
  40. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/conventions.py +9 -2
  41. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/discovery.py +38 -0
  42. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/eval_models.py +71 -1
  43. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/eval_runner.py +257 -7
  44. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/evals.py +573 -18
  45. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/models.py +2 -2
  46. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/paths.py +4 -0
  47. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/prompting.py +19 -3
  48. alysis_code-0.13.6/src/alysis_code/skills/selection.py +226 -0
  49. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/state.py +8 -2
  50. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/registry.py +3 -2
  51. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/verification_command_analysis.py +107 -0
  52. {alysis_code-0.13.4 → alysis_code-0.13.6}/.gitignore +0 -0
  53. {alysis_code-0.13.4 → alysis_code-0.13.6}/LICENSE +0 -0
  54. {alysis_code-0.13.4 → alysis_code-0.13.6}/NOTICE +0 -0
  55. {alysis_code-0.13.4 → alysis_code-0.13.6}/README.md +0 -0
  56. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/__main__.py +0 -0
  57. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/_build_info.py +0 -0
  58. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/account_login.py +0 -0
  59. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/README.md +0 -0
  60. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/__init__.py +0 -0
  61. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/blast_radius.py +0 -0
  62. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/cache_keepalive.py +0 -0
  63. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/completion_certificate.py +0 -0
  64. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/completion_gate.py +0 -0
  65. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/empty_response_stall.py +0 -0
  66. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/errors.py +0 -0
  67. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/llm_calls.py +0 -0
  68. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/mutation_classification.py +0 -0
  69. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/read_ledger.py +0 -0
  70. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/regression_baseline.py +0 -0
  71. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/sensitive_output.py +0 -0
  72. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/steering.py +0 -0
  73. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/subagent_workspace.py +0 -0
  74. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/turn/__init__.py +0 -0
  75. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/turn/events.py +0 -0
  76. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/turn/exploration.py +0 -0
  77. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/turn/interventions.py +0 -0
  78. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/turn/read_cache.py +0 -0
  79. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/turn/snapshot.py +0 -0
  80. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/turn_contract.py +0 -0
  81. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/turn_path.py +0 -0
  82. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/verification_commands.py +0 -0
  83. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent/verification_evidence.py +0 -0
  84. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent_loop.py +0 -0
  85. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent_runtimes/__init__.py +0 -0
  86. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent_runtimes/base.py +0 -0
  87. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent_runtimes/builtins.py +0 -0
  88. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent_runtimes/codex_cli.py +0 -0
  89. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent_runtimes/host.py +0 -0
  90. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent_runtimes/registry.py +0 -0
  91. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agent_runtimes/service.py +0 -0
  92. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agentbox_client.py +0 -0
  93. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/agentbox_integration.py +0 -0
  94. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/alysis_cloud.py +0 -0
  95. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/approval_scope.py +0 -0
  96. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/README.md +0 -0
  97. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/__init__.py +0 -0
  98. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/asset_read_core.py +0 -0
  99. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/budget_allocator.py +0 -0
  100. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/comprehender.py +0 -0
  101. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/index.py +0 -0
  102. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/ingestion.py +0 -0
  103. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/legacy_migration.py +0 -0
  104. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/models.py +0 -0
  105. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/ocr.py +0 -0
  106. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-000.txt +0 -0
  107. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-001.txt +0 -0
  108. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-002.txt +0 -0
  109. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-003.txt +0 -0
  110. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-004.txt +0 -0
  111. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-005.txt +0 -0
  112. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-006.txt +0 -0
  113. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-007.txt +0 -0
  114. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-008.txt +0 -0
  115. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-009.txt +0 -0
  116. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-010.txt +0 -0
  117. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-011.txt +0 -0
  118. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-012.txt +0 -0
  119. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-013.txt +0 -0
  120. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-014.txt +0 -0
  121. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-015.txt +0 -0
  122. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-016.txt +0 -0
  123. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-017.txt +0 -0
  124. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-018.txt +0 -0
  125. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-019.txt +0 -0
  126. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/ascii/f-020.txt +0 -0
  127. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/index.html +0 -0
  128. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/owl/show-owl.sh +0 -0
  129. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/paths.py +0 -0
  130. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/plan_binding.py +0 -0
  131. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/planner_context.py +0 -0
  132. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/planner_tools.py +0 -0
  133. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/prompts.py +0 -0
  134. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/replanner_context.py +0 -0
  135. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/surface.py +0 -0
  136. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/untrusted_content.py +0 -0
  137. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/usage_logger.py +0 -0
  138. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/worker_mirror.py +0 -0
  139. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/worker_section.py +0 -0
  140. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/assets/worker_tools.py +0 -0
  141. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/atomic_io.py +0 -0
  142. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/auth_diagnostics.py +0 -0
  143. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/background_runner.py +0 -0
  144. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/branding.py +0 -0
  145. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/budget_policy.py +0 -0
  146. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/build_identity.py +0 -0
  147. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/builtin_hooks/__init__.py +0 -0
  148. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/builtin_hooks/notify_done_windows.py +0 -0
  149. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/bwrap_etc.py +0 -0
  150. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/capabilities.py +0 -0
  151. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/chatgpt_codex_static_provider.py +0 -0
  152. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli.py +0 -0
  153. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/__init__.py +0 -0
  154. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/assets_cli.py +0 -0
  155. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/assets_modal.py +0 -0
  156. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/chat/__init__.py +0 -0
  157. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/chat/mid_turn_policy.py +0 -0
  158. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/chat/rendering.py +0 -0
  159. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/chat/state.py +0 -0
  160. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/chat_resume.py +0 -0
  161. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/__init__.py +0 -0
  162. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/_shared.py +0 -0
  163. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/auth.py +0 -0
  164. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/chat_resume_helpers.py +0 -0
  165. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/chat_state.py +0 -0
  166. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/chat_status.py +0 -0
  167. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/chat_terminal.py +0 -0
  168. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/chat_tui_panels.py +0 -0
  169. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/cli_common.py +0 -0
  170. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/cli_surface.py +0 -0
  171. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/config.py +0 -0
  172. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/conventions.py +0 -0
  173. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/execution_helpers.py +0 -0
  174. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/extensions.py +0 -0
  175. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/forge.py +0 -0
  176. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/forge_asset_view.py +0 -0
  177. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/forge_helpers.py +0 -0
  178. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/hooks.py +0 -0
  179. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/ide_bridge.py +0 -0
  180. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/mcp.py +0 -0
  181. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/profile.py +0 -0
  182. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/prompt_helpers.py +0 -0
  183. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/report.py +0 -0
  184. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/root.py +0 -0
  185. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/sandbox.py +0 -0
  186. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/server.py +0 -0
  187. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/sessions.py +0 -0
  188. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/startup.py +0 -0
  189. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/tools.py +0 -0
  190. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/commands/update.py +0 -0
  191. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/config_menu.py +0 -0
  192. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/forge.py +0 -0
  193. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/forge_recovery.py +0 -0
  194. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/setup_wizard.py +0 -0
  195. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/__init__.py +0 -0
  196. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/app.py +0 -0
  197. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/config.py +0 -0
  198. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/config_flow.py +0 -0
  199. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/config_overlay.py +0 -0
  200. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/footer.py +0 -0
  201. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/forge_status.py +0 -0
  202. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/markdown.py +0 -0
  203. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/owl.py +0 -0
  204. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/plan_meta.py +0 -0
  205. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/selection_bindings.py +0 -0
  206. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/setup_app.py +0 -0
  207. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/setup_flow.py +0 -0
  208. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/state.py +0 -0
  209. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/subagent_identity.py +0 -0
  210. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/subagent_panel.py +0 -0
  211. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/surface.py +0 -0
  212. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/transcript.py +0 -0
  213. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/update_prompt.py +0 -0
  214. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/cli_impl/tui/workspace_guard.py +0 -0
  215. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/clipboard.py +0 -0
  216. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/code_review.py +0 -0
  217. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/compaction/__init__.py +0 -0
  218. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/compaction/conversation_compactor.py +0 -0
  219. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/compaction/importance.py +0 -0
  220. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/compaction/settings.py +0 -0
  221. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/compaction/tool_output_offload.py +0 -0
  222. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/conflict_auto_resolver.py +0 -0
  223. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/context/__init__.py +0 -0
  224. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/context/tool_schema_budgeter.py +0 -0
  225. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/crash_diagnostics.py +0 -0
  226. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/custom_tools/README.md +0 -0
  227. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/custom_tools/__init__.py +0 -0
  228. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/custom_tools/discovery.py +0 -0
  229. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/custom_tools/runtime.py +0 -0
  230. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/custom_tools/session.py +0 -0
  231. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/custom_tools/trust.py +0 -0
  232. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/diff_paths.py +0 -0
  233. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/direction_change.py +0 -0
  234. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/dispatch_timing.py +0 -0
  235. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/durable_service_manager.py +0 -0
  236. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/edit_discipline.py +0 -0
  237. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/error_text.py +0 -0
  238. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/execution_context.py +0 -0
  239. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/execution_deadline.py +0 -0
  240. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/execution_shared.py +0 -0
  241. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/extensions/README.md +0 -0
  242. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/extensions/__init__.py +0 -0
  243. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/extensions/activation.py +0 -0
  244. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/extensions/install.py +0 -0
  245. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/extensions/manifest.py +0 -0
  246. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/extensions/models.py +0 -0
  247. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/extensions/paths.py +0 -0
  248. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/extensions/registry.json +0 -0
  249. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/extensions/registry.py +0 -0
  250. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/extensions/state.py +0 -0
  251. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/extensions/workspace_trust.py +0 -0
  252. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/failed_task_evidence.py +0 -0
  253. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/failure_category.py +0 -0
  254. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/feedback_report.py +0 -0
  255. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/file_classification.py +0 -0
  256. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/forge.py +0 -0
  257. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/forge_completion.py +0 -0
  258. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/forge_events.py +0 -0
  259. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/frontmatter_utils.py +0 -0
  260. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/git_evidence.py +0 -0
  261. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/git_ops.py +0 -0
  262. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/git_safe.py +0 -0
  263. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/git_worktrees.py +0 -0
  264. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/hooks/README.md +0 -0
  265. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/hooks/__init__.py +0 -0
  266. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/hooks/audit.py +0 -0
  267. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/hooks/config.py +0 -0
  268. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/hooks/dispatcher.py +0 -0
  269. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/hooks/models.py +0 -0
  270. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/hooks/trust.py +0 -0
  271. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/host_actions.py +0 -0
  272. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/host_browser.py +0 -0
  273. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/__init__.py +0 -0
  274. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/activity_events.py +0 -0
  275. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/approvals.py +0 -0
  276. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/artifacts.py +0 -0
  277. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/browser_egress_proxy.py +0 -0
  278. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/cdp_websocket_transport.py +0 -0
  279. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/change_ledger.py +0 -0
  280. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/context_blocks.py +0 -0
  281. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/event_stream.py +0 -0
  282. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/forge_protocol.py +0 -0
  283. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/forge_request_ledger.py +0 -0
  284. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/health.py +0 -0
  285. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/managed_browser.py +0 -0
  286. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/mcp_oauth_coordinator.py +0 -0
  287. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/mcp_oauth_lifecycle.py +0 -0
  288. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/prompt_queue.py +0 -0
  289. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/protocol.py +0 -0
  290. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/resumable_swarm.py +0 -0
  291. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/session_search.py +0 -0
  292. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/stdio_bridge.py +0 -0
  293. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/structured_state.py +0 -0
  294. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/ide/swarm_protocol.py +0 -0
  295. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/integration_gate.py +0 -0
  296. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/interactive_input_guard.py +0 -0
  297. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/interactive_plan_mode.py +0 -0
  298. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/internal_artifacts.py +0 -0
  299. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/knowledge_base.py +0 -0
  300. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/knowledge_capture.py +0 -0
  301. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/knowledge_librarian.py +0 -0
  302. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/language_policy.py +0 -0
  303. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/litellm_static_provider.py +0 -0
  304. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/__init__.py +0 -0
  305. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/anthropic_messages.py +0 -0
  306. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/base.py +0 -0
  307. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/cache_capabilities.py +0 -0
  308. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/cache_control_blocks.py +0 -0
  309. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/cache_policy.py +0 -0
  310. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/gemini_generate_content.py +0 -0
  311. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/gemini_interactions.py +0 -0
  312. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/metadata.py +0 -0
  313. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/protocols.py +0 -0
  314. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/request_plan.py +0 -0
  315. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/request_shape.py +0 -0
  316. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/temperature_compat.py +0 -0
  317. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/types.py +0 -0
  318. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm/usage_normalization.py +0 -0
  319. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/llm_error_display.py +0 -0
  320. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/logging_redaction.py +0 -0
  321. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/managed_host_deadline.py +0 -0
  322. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/README.md +0 -0
  323. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/__init__.py +0 -0
  324. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/client.py +0 -0
  325. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/config.py +0 -0
  326. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/errors.py +0 -0
  327. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/forge_scope.py +0 -0
  328. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/jsonrpc.py +0 -0
  329. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/manager.py +0 -0
  330. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/models.py +0 -0
  331. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/oauth.py +0 -0
  332. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/oauth_runtime.py +0 -0
  333. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/oauth_store.py +0 -0
  334. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/prompts.py +0 -0
  335. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/resources.py +0 -0
  336. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/roots.py +0 -0
  337. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/server_requests.py +0 -0
  338. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/token_store.py +0 -0
  339. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/transport_http.py +0 -0
  340. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/transport_stdio.py +0 -0
  341. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/mcp/untrusted_content.py +0 -0
  342. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/merge_conflict_reviewer.py +0 -0
  343. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/model_catalog/__init__.py +0 -0
  344. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/model_catalog/chatgpt_codex_subscription_snapshot.json +0 -0
  345. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.json +0 -0
  346. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/model_catalog/litellm_model_prices_snapshot.meta.json +0 -0
  347. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/model_metadata_policy.py +0 -0
  348. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/model_metadata_utils.py +0 -0
  349. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/model_router.py +0 -0
  350. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/permission_policy.py +0 -0
  351. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/personas.py +0 -0
  352. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/pipeline_facts.py +0 -0
  353. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/plan_assistant.py +0 -0
  354. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/plan_mode.py +0 -0
  355. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/plan_reconciliation.py +0 -0
  356. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/plan_repair.py +0 -0
  357. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/plan_validation.py +0 -0
  358. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/planning_constraints.py +0 -0
  359. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/policy.py +0 -0
  360. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/preview_server.py +0 -0
  361. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/process_reaping.py +0 -0
  362. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/profiles.py +0 -0
  363. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/provider_auth/__init__.py +0 -0
  364. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/provider_auth/base.py +0 -0
  365. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/provider_auth/openai_codex.py +0 -0
  366. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/provider_auth/registry.py +0 -0
  367. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/provider_auth/store.py +0 -0
  368. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/provider_diagnostics.py +0 -0
  369. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/provider_model_catalog.py +0 -0
  370. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/provider_telemetry.py +0 -0
  371. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/provider_url.py +0 -0
  372. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/reasoning_contracts.py +0 -0
  373. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/remote_sync.py +0 -0
  374. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/replanning.py +0 -0
  375. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/repo_scan.py +0 -0
  376. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/request_estimation.py +0 -0
  377. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/review_gate.py +0 -0
  378. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/run_lock.py +0 -0
  379. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/run_outcome.py +0 -0
  380. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/run_provenance.py +0 -0
  381. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/run_state.py +0 -0
  382. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/runtime_artifacts.py +0 -0
  383. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/runtime_context_features.py +0 -0
  384. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/runtime_kind.py +0 -0
  385. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/safety/__init__.py +0 -0
  386. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/safety/mcp_sanitize.py +0 -0
  387. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/safety/safe_http.py +0 -0
  388. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/safety/subagent_report.py +0 -0
  389. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/sandbox_doctor.py +0 -0
  390. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/sandbox_runner.py +0 -0
  391. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/sandbox_settings.py +0 -0
  392. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/serialized_paths.py +0 -0
  393. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/server/__init__.py +0 -0
  394. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/server/app.py +0 -0
  395. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/server/auth.py +0 -0
  396. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/server/job_config.py +0 -0
  397. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/server/settings.py +0 -0
  398. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/server/store.py +0 -0
  399. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/server/worker_runner.py +0 -0
  400. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/service_persistence.py +0 -0
  401. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/session_artifacts.py +0 -0
  402. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/session_metrics.py +0 -0
  403. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/session_store.py +0 -0
  404. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/install.py +0 -0
  405. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/loader.py +0 -0
  406. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/matching.py +0 -0
  407. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/scaffold.py +0 -0
  408. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/transactions.py +0 -0
  409. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/skills/validation.py +0 -0
  410. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/step_budget.py +0 -0
  411. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/subagent_labels.py +0 -0
  412. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/subagents.py +0 -0
  413. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/surface/__init__.py +0 -0
  414. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/surface/base.py +0 -0
  415. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/surface/console.py +0 -0
  416. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/surface/events.py +0 -0
  417. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/surface/hidden_surface.py +0 -0
  418. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/surface/noop_surface.py +0 -0
  419. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/surface/rich_surface.py +0 -0
  420. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/surface/styles.py +0 -0
  421. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/surface/theme.py +0 -0
  422. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/surface/types.py +0 -0
  423. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/swarm_backend.py +0 -0
  424. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/swarm_orchestrator.py +0 -0
  425. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/swarm_scheduler.py +0 -0
  426. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/swarm_trace.py +0 -0
  427. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/swarm_worker.py +0 -0
  428. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/swarm_write_guard.py +0 -0
  429. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/task_dependencies.py +0 -0
  430. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/task_readiness.py +0 -0
  431. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/task_scope.py +0 -0
  432. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/terminal_manager.py +0 -0
  433. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/terminal_ownership.py +0 -0
  434. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/text_normalization.py +0 -0
  435. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/token_budget.py +0 -0
  436. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/README.md +0 -0
  437. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/__init__.py +0 -0
  438. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/artifacts.py +0 -0
  439. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/availability.py +0 -0
  440. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/fs.py +0 -0
  441. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/git.py +0 -0
  442. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/history.py +0 -0
  443. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/http_timeout.py +0 -0
  444. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/image_generation.py +0 -0
  445. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/repo_map.py +0 -0
  446. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/search.py +0 -0
  447. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/shell.py +0 -0
  448. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/symbols.py +0 -0
  449. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/test_discovery.py +0 -0
  450. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/web.py +0 -0
  451. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/web_search.py +0 -0
  452. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/web_search_dashscope.py +0 -0
  453. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/web_search_ddgs.py +0 -0
  454. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/web_search_provider_adapters.py +0 -0
  455. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/tools/web_search_tavily.py +0 -0
  456. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/transport_retry.py +0 -0
  457. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/updates.py +0 -0
  458. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/usage_tracker.py +0 -0
  459. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/verification_contract.py +0 -0
  460. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/verification_failure_summary.py +0 -0
  461. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/verification_repair.py +0 -0
  462. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/verify_gate.py +0 -0
  463. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/web_research.py +0 -0
  464. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/web_search_adapters.py +0 -0
  465. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/web_search_policy.py +0 -0
  466. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/workspace_binding.py +0 -0
  467. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/workspace_binding_ui.py +0 -0
  468. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/workspace_context.py +0 -0
  469. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/workspace_isolation.py +0 -0
  470. {alysis_code-0.13.4 → alysis_code-0.13.6}/src/alysis_code/workspace_provisioning.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alysis-code
3
- Version: 0.13.4
3
+ Version: 0.13.6
4
4
  Summary: Local CLI coding agent powered by any API.
5
5
  Project-URL: Changelog, https://github.com/AlysisAi/alysis-code/blob/main/docs/CHANGELOG.md
6
6
  Project-URL: Documentation, https://github.com/AlysisAi/alysis-code/tree/main/docs
@@ -408,6 +408,47 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
408
408
  Workspace-target extraction also keeps extensionless dotfiles such as `.npmrc` available to
409
409
  verification selection.
410
410
 
411
+ ## [0.13.6] - 2026-09-08
412
+
413
+ ### Added
414
+
415
+ - **DeepSeek V4.1 Flash internal beta.** `deepseek-v4.1-flash-expires-on-0910`
416
+ (announced 2026-09-08) is now on the DeepSeek preset menu. It is a
417
+ new-architecture model with native multimodal input, served on the unchanged
418
+ `https://api.deepseek.com` base URL under a temporary id that stops resolving
419
+ on 2026-09-10; DeepSeek bills it at the `deepseek-v4-flash` rate and caps
420
+ accounts at 20 concurrent requests. Registry metadata assumes the V4 Flash
421
+ shape (1M context, 384K output, vision, thinking `low|high|max`) until
422
+ DeepSeek publishes the GA id and limits. `deepseek-v4-pro` stays the default.
423
+
424
+ ### Changed
425
+
426
+ - **DeepSeek footer labels follow vendor spelling.** Names now appear as
427
+ `DeepSeek-V4-Pro` and `DeepSeek-V4.1-Flash`; dated beta ids omit their
428
+ `-expires-on-<date>` suffix from the displayed label.
429
+
430
+ ## [0.13.5] - 2026-09-07
431
+
432
+ ### Added
433
+
434
+ - Ship eight bundled workflow skills: `address-pr-comments`, `code-review`,
435
+ `commit`, `debug`, `fix-ci`, `release-notes`, `security-review`, and `skill-creator`.
436
+ - Select a relevant skill automatically with a bounded, reasoning-off model call;
437
+ read its instructions before other task tools, with ordinary routing as fallback.
438
+ - Invoke skills with `$<name> [task]` at an idle chat prompt, with live completion
439
+ and one-turn attachment. `/skill` remains supported.
440
+ - Add `bundled_skills_enabled` configuration, project and user override precedence,
441
+ and model-in-loop bundled workflow evaluations with launch-readiness checks.
442
+
443
+ ### Fixed
444
+
445
+ - Harden skill instruction boundaries, selection ordering, and per-turn cleanup.
446
+ - Preserve resolved skill settings in child agents and restore slash completion.
447
+ - Recognize silent and inline verification results and preserve authoritative
448
+ verification evidence when supplemental checks run.
449
+ - Bound stalled OpenAI-compatible and Responses streams, including traffic that
450
+ contains no meaningful progress.
451
+
411
452
  ## [0.13.4] - 2026-09-05
412
453
 
413
454
  Model-catalog and TUI-access refresh.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "alysis-code"
7
- version = "0.13.4"
7
+ version = "0.13.6"
8
8
  description = "Local CLI coding agent powered by any API."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,3 +1,3 @@
1
1
  __all__ = ["__version__"]
2
2
 
3
- __version__ = "0.13.4"
3
+ __version__ = "0.13.6"
@@ -777,7 +777,7 @@ def record_acceptance_tool_effect(
777
777
  if durable_criterion_ids
778
778
  else _block_session_owned_service_criteria(contract=contract)
779
779
  )
780
- if not criterion_ids and normalized_tool in {"verify_run", "shell_run"}:
780
+ if normalized_tool in {"verify_run", "shell_run"}:
781
781
  criterion_ids.extend(
782
782
  _update_repo_surface_criteria(
783
783
  contract=contract,
@@ -1031,6 +1031,33 @@ def _clause_path_role(clause: str) -> AcceptancePathRole:
1031
1031
  return AcceptancePathRole.UNKNOWN_REFERENCE
1032
1032
 
1033
1033
 
1034
+ def _path_role(
1035
+ clause: str,
1036
+ path_match: re.Match[str],
1037
+ ) -> AcceptancePathRole:
1038
+ path_start = path_match.start(1)
1039
+ preservation = None
1040
+ for candidate in _PRESERVATION_ROLE_RE.finditer(clause):
1041
+ if candidate.start() >= path_start:
1042
+ break
1043
+ preservation = candidate
1044
+ if preservation is None:
1045
+ return _clause_path_role(clause)
1046
+ if path_start < preservation.end():
1047
+ return AcceptancePathRole.PRESERVATION_TARGET
1048
+
1049
+ boundary = clause.rfind(",", preservation.end(), path_start)
1050
+ if boundary < 0:
1051
+ return AcceptancePathRole.PRESERVATION_TARGET
1052
+ scope_is_complete = bool(re.search(r"\b(?:unchanged|intact)\s*$", preservation.group(0), re.I))
1053
+ prior_path = _PATH_RE.search(clause, preservation.end(), boundary)
1054
+ # A completed state phrase ends at the comma. An open direct-object phrase
1055
+ # carries across it only after binding a path, which preserves path lists.
1056
+ if not scope_is_complete and prior_path is not None:
1057
+ return AcceptancePathRole.PRESERVATION_TARGET
1058
+ return _clause_path_role(clause[boundary + 1 :])
1059
+
1060
+
1034
1061
  def _clean_path_token(path: str) -> str:
1035
1062
  cleaned = str(path or "").strip().strip("`'\"").replace("\\", "/")
1036
1063
  cleaned = cleaned.rstrip(".,;:!?)]}")
@@ -1043,8 +1070,8 @@ def _extract_path_refs(*, root: Path, texts: list[str]) -> list[AcceptancePathRe
1043
1070
  refs: list[AcceptancePathRef] = []
1044
1071
  seen: set[tuple[str, str, str]] = set()
1045
1072
  for clause in _iter_clauses(texts):
1046
- role = _clause_path_role(clause)
1047
1073
  for match in _PATH_RE.finditer(clause):
1074
+ role = _path_role(clause, match)
1048
1075
  path_ref = _resolve_acceptance_path(
1049
1076
  root=root,
1050
1077
  raw_text=match.group(1),
@@ -1897,6 +1924,7 @@ def _update_repo_surface_criteria(
1897
1924
  criterion.failure_summary = "Verification evidence was supplemental or unsafe"
1898
1925
  elif passed is True:
1899
1926
  criterion.status = AcceptanceCriterionStatus.PASSED
1927
+ criterion.failure_summary = ""
1900
1928
  elif passed is False:
1901
1929
  criterion.status = AcceptanceCriterionStatus.FAILED
1902
1930
  criterion.failure_summary = f"Verification command failed: {command}"
@@ -286,7 +286,8 @@ _SYSTEM_PROMPT_SKILL_DISCOVERY_SECTION = """
286
286
 
287
287
  Skills and skill_read
288
288
  - The <skill_context> block lists every skill discovered for this session with its name and description. These descriptions tell you when each skill applies.
289
- - BEFORE acting on a task that matches a skill's description, call skill_read(name) to load its full instructions. Do not skip this step when a skill description plausibly fits the task.
289
+ - Select only a skill whose action the user requests; a concept mention is not a match. Honor explicit exclusions and choose the most specific fit.
290
+ - BEFORE any other task action, call skill_read(name) for each selected skill.
290
291
  - Use skill_read(name, path) for bundled references, scripts, or assets cited inside the skill body.
291
292
  - Do not invent skill names. Only use names that appear in the <skill_context> block.
292
293
  - Project-local explicit-turn skill context (when present) outranks this discovery list.
@@ -2261,6 +2262,7 @@ def prepare_session_prompt_context(
2261
2262
  discover_skills(
2262
2263
  focus_path=workspace_context.focus_path,
2263
2264
  workspace_root=workspace_context.workspace_root,
2265
+ cfg=session_cfg,
2264
2266
  )
2265
2267
  if resolved_skills_enabled
2266
2268
  else DiscoveredSkills(skills={}, ordered=(), issues=())
@@ -2420,7 +2422,10 @@ def prepare_session_prompt_context(
2420
2422
  workspace_root=workspace_context.workspace_root,
2421
2423
  )
2422
2424
  skill_context = (
2423
- build_skill_advertise_block(skills=discovered_skills.ordered)
2425
+ build_skill_advertise_block(
2426
+ skills=discovered_skills.ordered,
2427
+ skills_auto_invoke=skills_auto_invoke,
2428
+ )
2424
2429
  if resolved_skills_enabled
2425
2430
  else None
2426
2431
  )
@@ -41,6 +41,7 @@ from pathlib import Path, PurePosixPath
41
41
  from typing import Any
42
42
 
43
43
  from ..branding import env_get
44
+ from ..verification_command_analysis import analyze_verification_command
44
45
  from .turn_contract import TurnSemantics, TurnTaskShape
45
46
 
46
47
  # ---------------------------------------------------------------------------
@@ -141,6 +142,8 @@ def _normalize_artifact_path(path: str) -> str:
141
142
 
142
143
 
143
144
  def _command_path_tokens(command: str) -> list[str]:
145
+ if analyze_verification_command(command, trusted=True).uses_opaque_inline_code:
146
+ return []
144
147
  tokens: list[str] = []
145
148
  for raw in _COMMAND_TOKEN_SPLIT_RE.split(str(command or "")):
146
149
  token = raw.strip().strip("`'\"").rstrip(_TOKEN_TRAILING_JUNK)
@@ -95,12 +95,13 @@ from ..llm.metadata import (
95
95
  )
96
96
  from ..llm.openai_compat import OpenAICompatClient as _OpenAICompatClient
97
97
  from ..llm.protocols import OPENAI_COMPAT_PROTOCOL, get_provider_protocol_capabilities
98
+ from ..llm.provider_limits import ProviderRetrySettings, resolve_provider_retry_settings
98
99
  from ..llm.types import UsageConfidence, UsageSource
99
100
  from ..mcp.config import load_resolved_mcp_config
100
101
  from ..mcp.manager import ForgeTaskScopedMcpManager, McpManager, create_mcp_manager
101
102
  from ..model_metadata_policy import ActiveModelRef, evaluate_active_model_metadata_policy
102
103
  from ..model_registry import ModelRegistry, resolve_model_provider_key
103
- from ..model_router import ROLE_CODING, ROLE_COMPACTOR, resolve_model_for_role
104
+ from ..model_router import ROLE_CODING, ROLE_COMPACTOR, ROLE_ROUTER, resolve_model_for_role
104
105
  from ..personas import (
105
106
  PersonaSwitchState,
106
107
  load_custom_personas,
@@ -235,6 +236,15 @@ from .subagent_execution import ChildScheduler
235
236
 
236
237
  OpenAICompatClient = _OpenAICompatClient
237
238
  _DEFAULT_CREATE_MCP_MANAGER = create_mcp_manager
239
+ _SKILL_SELECTOR_TIMEOUT_S = 15.0
240
+
241
+
242
+ def _skill_selector_provider_retry_settings(
243
+ cfg: AppConfig | None,
244
+ ) -> ProviderRetrySettings:
245
+ """Keep the optional selector to one provider attempt on every protocol."""
246
+
247
+ return replace(resolve_provider_retry_settings(cfg), disable_retries=True)
238
248
 
239
249
 
240
250
  def _build_workspace_trust_prompt(
@@ -2197,7 +2207,16 @@ def create_session(
2197
2207
  role=ROLE_COMPACTOR,
2198
2208
  plan=None,
2199
2209
  )
2210
+ router_model_name = ""
2211
+ if resolved_skills_enabled and skills_auto_invoke and bool(discovered_skills.ordered):
2212
+ router_model_name = resolve_model_for_role(
2213
+ cfg=session_cfg,
2214
+ role=ROLE_ROUTER,
2215
+ plan=None,
2216
+ )
2200
2217
  active_model_refs = [ActiveModelRef(role=ROLE_CODING, model_name=session_cfg.model)]
2218
+ if router_model_name:
2219
+ active_model_refs.append(ActiveModelRef(role=ROLE_ROUTER, model_name=router_model_name))
2201
2220
  if compactor_model_name:
2202
2221
  active_model_refs.append(
2203
2222
  ActiveModelRef(role=ROLE_COMPACTOR, model_name=compactor_model_name)
@@ -2220,6 +2239,35 @@ def create_session(
2220
2239
  reasoning_effort=llm_reasoning_effort,
2221
2240
  session_id=session_id,
2222
2241
  )
2242
+ router_client: ChatClient | None = None
2243
+ if router_model_name:
2244
+ selector_timeout_s = min(llm_timeout_s, _SKILL_SELECTOR_TIMEOUT_S)
2245
+ router_client = _make_session_llm_client(
2246
+ cfg=session_cfg,
2247
+ api_key=api_key,
2248
+ model=router_model_name,
2249
+ timeout_s=selector_timeout_s,
2250
+ temperature=0.0,
2251
+ prompt_cache_key=prompt_cache_stream_key,
2252
+ prompt_cache_retention=resolve_prompt_cache_retention(session_cfg),
2253
+ prompt_cache_namespace=_prompt_cache_namespace(ROLE_ROUTER),
2254
+ enable_thinking=False,
2255
+ reasoning_effort="",
2256
+ session_id=session_id,
2257
+ )
2258
+ # Client adapters normalize an empty effort to ``None``. Keep the
2259
+ # selector's session-owned state explicit so later in-place reloads and
2260
+ # stale-client checks preserve the reasoning-off contract verbatim.
2261
+ router_client.reasoning_effort = ""
2262
+ if hasattr(router_client, "stream_no_progress_timeout_s"):
2263
+ router_client.stream_no_progress_timeout_s = min(
2264
+ float(router_client.stream_no_progress_timeout_s),
2265
+ selector_timeout_s,
2266
+ )
2267
+ if hasattr(router_client, "provider_retry_settings"):
2268
+ router_client.provider_retry_settings = _skill_selector_provider_retry_settings(
2269
+ session_cfg
2270
+ )
2223
2271
  sessions_dir = (
2224
2272
  session_log_dir_override
2225
2273
  if session_log_dir_override is not None
@@ -2413,7 +2461,7 @@ def create_session(
2413
2461
  "task_max_steps": session_cfg.task_max_steps,
2414
2462
  "subagent_max_steps": session_cfg.subagent_max_steps,
2415
2463
  "model": session_cfg.model,
2416
- "router_model": "",
2464
+ "router_model": router_model_name,
2417
2465
  "base_url_descriptor": endpoint_descriptor(session_cfg.base_url),
2418
2466
  "profile_name": active_profile.name,
2419
2467
  "protocol": active_profile.protocol,
@@ -3134,6 +3182,9 @@ def create_session(
3134
3182
  surface=surface,
3135
3183
  store=store,
3136
3184
  client=client,
3185
+ router_client=router_client,
3186
+ _semantic_router_bound_client=client,
3187
+ _provisioned_router_client=router_client,
3137
3188
  persona_client_cache={(session_cfg.model, coding_temperature): client},
3138
3189
  persona_client_key=(session_cfg.model, coding_temperature),
3139
3190
  model_registry=registry,
@@ -859,6 +859,7 @@ class SubagentLauncher:
859
859
  non_interactive: bool,
860
860
  verification_enabled: bool,
861
861
  authoritative_verification_commands: list[str] | None,
862
+ skills_enabled: bool,
862
863
  subagents_enabled: bool,
863
864
  subagent_depth: int,
864
865
  subagent_registry: dict[str, SubagentDefinition] | None,
@@ -898,6 +899,7 @@ class SubagentLauncher:
898
899
  self.non_interactive = non_interactive
899
900
  self.verification_enabled = verification_enabled
900
901
  self.authoritative_verification_commands = authoritative_verification_commands
902
+ self.skills_enabled = bool(skills_enabled)
901
903
  self.subagents_enabled = subagents_enabled
902
904
  self.subagent_depth = subagent_depth
903
905
  self.subagent_registry = subagent_registry
@@ -1833,6 +1835,11 @@ class SubagentLauncher:
1833
1835
  return {"error": f"Subagent model resolution failed: {e}"}
1834
1836
  subagent_cfg.model = selected_model
1835
1837
  subagent_cfg.routing_mode = _ROUTING_MODE_CODE_ONLY
1838
+ # Skills are an independent session capability, not an implicit part of
1839
+ # delegation. Preserve the parent's resolved master switch explicitly;
1840
+ # bundled/custom discovery in the child continues to follow normal skill
1841
+ # configuration only when that switch is enabled.
1842
+ subagent_cfg.skills_enabled = self.skills_enabled
1836
1843
  resolved_temperature = resolve_role_temperature(subagent_cfg, role=temperature_role)
1837
1844
  subagent_cfg.temperature = resolved_temperature
1838
1845
  subagent_cfg.coding_temperature = resolved_temperature
@@ -4417,6 +4417,7 @@ def build_tools(
4417
4417
  non_interactive=non_interactive,
4418
4418
  verification_enabled=verification_enabled,
4419
4419
  authoritative_verification_commands=authoritative_verify_commands,
4420
+ skills_enabled=skills_enabled,
4420
4421
  subagents_enabled=subagents_enabled,
4421
4422
  subagent_depth=subagent_depth,
4422
4423
  subagent_registry=subagent_registry,
@@ -4597,6 +4598,7 @@ def build_tools(
4597
4598
  non_interactive=non_interactive,
4598
4599
  verification_enabled=verification_enabled,
4599
4600
  authoritative_verification_commands=authoritative_verify_commands,
4601
+ skills_enabled=skills_enabled,
4600
4602
  subagents_enabled=True,
4601
4603
  subagent_depth=subagent_depth,
4602
4604
  subagent_registry=subagent_registry,