multi-forge 1.0.1__tar.gz → 1.0.2__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 (495) hide show
  1. {multi_forge-1.0.1 → multi_forge-1.0.2}/PKG-INFO +1 -1
  2. {multi_forge-1.0.1 → multi_forge-1.0.2}/pyproject.toml +1 -1
  3. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/claude.py +3 -2
  4. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/backends/litellm.yaml +90 -2
  5. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/anthropic-passthrough.yaml +1 -1
  6. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/codex-responses-local.yaml +2 -0
  7. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-anthropic-local.yaml +4 -3
  8. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-anthropic.yaml +6 -5
  9. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-openai-codex-local.yaml +2 -0
  10. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-openai-local.yaml +2 -0
  11. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-openai.yaml +2 -0
  12. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-anthropic.yaml +5 -4
  13. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-openai-codex.yaml +2 -0
  14. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-openai.yaml +3 -1
  15. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/schema.py +7 -2
  16. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/data/model_catalog.yaml +70 -11
  17. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/data/model_routes.yaml +63 -0
  18. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/llm/clients/openai_compat.py +4 -7
  19. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/models/catalog.py +4 -0
  20. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/models/direct_model.py +13 -5
  21. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/models/types.py +2 -0
  22. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/claude_session.py +6 -1
  23. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/converters.py +23 -1
  24. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/intercept.py +23 -4
  25. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/passthrough_ingress.py +11 -1
  26. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/reasoning.py +3 -0
  27. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/server.py +3 -1
  28. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/models.py +9 -0
  29. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/4-proxy.md +4 -4
  30. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist.md +2 -2
  31. {multi_forge-1.0.1 → multi_forge-1.0.2}/.gitignore +0 -0
  32. {multi_forge-1.0.1 → multi_forge-1.0.2}/LICENSE +0 -0
  33. {multi_forge-1.0.1 → multi_forge-1.0.2}/NOTICE +0 -0
  34. {multi_forge-1.0.1 → multi_forge-1.0.2}/README.md +0 -0
  35. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/agents/.gitkeep +0 -0
  36. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/commands/.gitkeep +0 -0
  37. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/__init__.py +0 -0
  38. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/backend/__init__.py +0 -0
  39. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/backend/adapters/__init__.py +0 -0
  40. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/backend/adapters/litellm.py +0 -0
  41. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/backend/creation.py +0 -0
  42. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/backend/registry.py +0 -0
  43. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/backend/remote/__init__.py +0 -0
  44. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/backend/remote/base.py +0 -0
  45. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/backend/remote/openrouter.py +0 -0
  46. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/backend/sources.py +0 -0
  47. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/__init__.py +0 -0
  48. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/activity.py +0 -0
  49. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/auth.py +0 -0
  50. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/backend.py +0 -0
  51. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/codex.py +0 -0
  52. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/config_cmd.py +0 -0
  53. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/consumer_lane_freeze.py +0 -0
  54. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/editor.py +0 -0
  55. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/extensions.py +0 -0
  56. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/gc.py +0 -0
  57. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/guards.py +0 -0
  58. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/__init__.py +0 -0
  59. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/_group.py +0 -0
  60. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/_helpers.py +0 -0
  61. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/authority.py +0 -0
  62. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/codex_patch.py +0 -0
  63. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/codex_policy.py +0 -0
  64. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/codex_transfer.py +0 -0
  65. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/commands.py +0 -0
  66. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/direct_commands.py +0 -0
  67. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/policy.py +0 -0
  68. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/protocols.py +0 -0
  69. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/read_hygiene.py +0 -0
  70. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/hooks/verification.py +0 -0
  71. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/info.py +0 -0
  72. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/logs.py +0 -0
  73. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/main.py +0 -0
  74. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/memory.py +0 -0
  75. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/memory_report.py +0 -0
  76. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/memory_writer.py +0 -0
  77. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/model.py +0 -0
  78. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/output.py +0 -0
  79. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/policy.py +0 -0
  80. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/proxy.py +0 -0
  81. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/proxy_audit.py +0 -0
  82. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/proxy_costs.py +0 -0
  83. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/runtime.py +0 -0
  84. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/search.py +0 -0
  85. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session.py +0 -0
  86. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_adopt.py +0 -0
  87. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_authority.py +0 -0
  88. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_authority_options.py +0 -0
  89. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_codex.py +0 -0
  90. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_fork.py +0 -0
  91. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_lane.py +0 -0
  92. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_lifecycle.py +0 -0
  93. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_manage.py +0 -0
  94. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_memory.py +0 -0
  95. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_model.py +0 -0
  96. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_repair.py +0 -0
  97. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_resume_modes.py +0 -0
  98. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_rewind.py +0 -0
  99. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_route_recovery.py +0 -0
  100. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_routing.py +0 -0
  101. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/session_supervisor_options.py +0 -0
  102. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/status_line.py +0 -0
  103. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/statusline/__init__.py +0 -0
  104. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/statusline/context.py +0 -0
  105. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/statusline/formatting.py +0 -0
  106. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/statusline/names.py +0 -0
  107. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/statusline/palette.py +0 -0
  108. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/statusline/registry.py +0 -0
  109. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/statusline/rendering.py +0 -0
  110. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/statusline/sources.py +0 -0
  111. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/statusline/throttle.py +0 -0
  112. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/statusline/types.py +0 -0
  113. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/telemetry.py +0 -0
  114. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/trace.py +0 -0
  115. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/transfer.py +0 -0
  116. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/workflow.py +0 -0
  117. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/cli/workspace.py +0 -0
  118. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/__init__.py +0 -0
  119. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/dataclass_utils.py +0 -0
  120. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/__init__.py +0 -0
  121. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/backends/__init__.py +0 -0
  122. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/__init__.py +0 -0
  123. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-gemini-flash-local.yaml +0 -0
  124. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-gemini-local.yaml +0 -0
  125. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-gemini-test.yaml +0 -0
  126. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-gemini.yaml +0 -0
  127. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-deepseek.yaml +0 -0
  128. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-gemini-flash.yaml +0 -0
  129. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-gemini.yaml +0 -0
  130. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-glm.yaml +0 -0
  131. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-kimi.yaml +0 -0
  132. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-minimax.yaml +0 -0
  133. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-qwen.yaml +0 -0
  134. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/config/loader.py +0 -0
  135. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/__init__.py +0 -0
  136. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/auth/__init__.py +0 -0
  137. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/auth/capabilities.py +0 -0
  138. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/auth/credentials_file.py +0 -0
  139. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/auth/protocols.py +0 -0
  140. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/auth/secrets.py +0 -0
  141. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/auth/template_secrets.py +0 -0
  142. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/backend_dependency.py +0 -0
  143. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/credential_registry.py +0 -0
  144. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/data/__init__.py +0 -0
  145. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/data/model_practices.yaml +0 -0
  146. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/data/system_prompt_addendums/__init__.py +0 -0
  147. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/data/system_prompt_addendums/gemini.md +0 -0
  148. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/data/system_prompt_addendums/openai.md +0 -0
  149. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/effort.py +0 -0
  150. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/identifiers.py +0 -0
  151. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/invoker/__init__.py +0 -0
  152. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/invoker/_lifecycle.py +0 -0
  153. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/invoker/claude.py +0 -0
  154. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/invoker/codex.py +0 -0
  155. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/invoker/codex_stream.py +0 -0
  156. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/invoker/types.py +0 -0
  157. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/lanes.py +0 -0
  158. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/llm/__init__.py +0 -0
  159. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/llm/clients/__init__.py +0 -0
  160. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/llm/clients/base.py +0 -0
  161. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/llm/clients/litellm.py +0 -0
  162. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/llm/clients/openrouter.py +0 -0
  163. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/llm/credentials.py +0 -0
  164. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/llm/detection.py +0 -0
  165. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/llm/errors.py +0 -0
  166. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/llm/openrouter_policy.py +0 -0
  167. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/llm/protocols.py +0 -0
  168. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/llm/types.py +0 -0
  169. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/logging.py +0 -0
  170. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/metric_formatting.py +0 -0
  171. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/models/__init__.py +0 -0
  172. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/models/model_practices.py +0 -0
  173. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/models/model_reference.py +0 -0
  174. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/models/model_routes.py +0 -0
  175. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/naming.py +0 -0
  176. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/__init__.py +0 -0
  177. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/backend_reconcile.py +0 -0
  178. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/codex_adopt.py +0 -0
  179. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/codex_bridge.py +0 -0
  180. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/codex_enrollment.py +0 -0
  181. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/codex_interactive.py +0 -0
  182. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/codex_session.py +0 -0
  183. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/codex_thread_index.py +0 -0
  184. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/context.py +0 -0
  185. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/gc.py +0 -0
  186. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/policy.py +0 -0
  187. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/provider_trace.py +0 -0
  188. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/proxy.py +0 -0
  189. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/resolution.py +0 -0
  190. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/session.py +0 -0
  191. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/session_active.py +0 -0
  192. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/session_adopt.py +0 -0
  193. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/session_authority.py +0 -0
  194. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/session_authority_launch.py +0 -0
  195. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/session_context.py +0 -0
  196. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/session_fork_execution.py +0 -0
  197. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/session_fork_preflight.py +0 -0
  198. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/session_model.py +0 -0
  199. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/session_model_routing.py +0 -0
  200. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/session_repair.py +0 -0
  201. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/session_routing.py +0 -0
  202. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/transfer.py +0 -0
  203. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/usage_summary.py +0 -0
  204. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/ops/workspace.py +0 -0
  205. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/paths.py +0 -0
  206. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/process.py +0 -0
  207. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/provider_types.py +0 -0
  208. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/reactive/__init__.py +0 -0
  209. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/reactive/cost_tracking.py +0 -0
  210. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/reactive/env.py +0 -0
  211. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/reactive/headless_json.py +0 -0
  212. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/reactive/llm_call.py +0 -0
  213. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/reactive/proxy.py +0 -0
  214. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/reactive/routing.py +0 -0
  215. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/reactive/session_runner.py +0 -0
  216. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/reactive/structured_output.py +0 -0
  217. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/reactive/tagger.py +0 -0
  218. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/reactive/throttle.py +0 -0
  219. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/run_id.py +0 -0
  220. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/runtime/__init__.py +0 -0
  221. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/runtime/codex_preflight.py +0 -0
  222. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/runtime/codex_preflight_cache.py +0 -0
  223. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/runtime/codex_rollouts.py +0 -0
  224. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/runtime/registry.py +0 -0
  225. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/runtime_vocab.py +0 -0
  226. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/state/__init__.py +0 -0
  227. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/state/exceptions.py +0 -0
  228. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/state/io.py +0 -0
  229. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/state/lock.py +0 -0
  230. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/state/retention.py +0 -0
  231. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/state/timestamps.py +0 -0
  232. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/state/versioned_store.py +0 -0
  233. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/telemetry/__init__.py +0 -0
  234. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/telemetry/caps.py +0 -0
  235. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/telemetry/downstream.py +0 -0
  236. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/telemetry/downstream_retention.py +0 -0
  237. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/telemetry/jsonl_io.py +0 -0
  238. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/telemetry/upstream.py +0 -0
  239. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/telemetry/vocabulary.py +0 -0
  240. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/tiers.py +0 -0
  241. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/transcript.py +0 -0
  242. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/typing_helpers.py +0 -0
  243. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/usage/__init__.py +0 -0
  244. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/usage/billing.py +0 -0
  245. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/usage/correlation.py +0 -0
  246. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/usage/emit.py +0 -0
  247. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/usage/ledger.py +0 -0
  248. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/usage/measurement.py +0 -0
  249. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/usage/vocabulary.py +0 -0
  250. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/wire_shapes.py +0 -0
  251. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/workqueue/__init__.py +0 -0
  252. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/workqueue/queue.py +0 -0
  253. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/core/workqueue/types.py +0 -0
  254. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/__init__.py +0 -0
  255. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/codex_hooks.py +0 -0
  256. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/doctor.py +0 -0
  257. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/exceptions.py +0 -0
  258. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/hook_dispatcher.py +0 -0
  259. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/hook_migration.py +0 -0
  260. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/hooks.py +0 -0
  261. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/installer.py +0 -0
  262. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/models.py +0 -0
  263. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/module_planning.py +0 -0
  264. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/ownership.py +0 -0
  265. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/path_policy.py +0 -0
  266. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/preset.py +0 -0
  267. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/project_compat.py +0 -0
  268. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/project_registry.py +0 -0
  269. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/runtime_removal.py +0 -0
  270. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/settings_merge.py +0 -0
  271. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/settings_rollback.py +0 -0
  272. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/skill_cache.py +0 -0
  273. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/skill_compiler.py +0 -0
  274. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/skill_planning.py +0 -0
  275. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/skill_validation.py +0 -0
  276. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/tracking.py +0 -0
  277. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/unmanaged.py +0 -0
  278. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/install/version.py +0 -0
  279. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/__init__.py +0 -0
  280. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/action_identity.py +0 -0
  281. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/deterministic/__init__.py +0 -0
  282. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/deterministic/base.py +0 -0
  283. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/deterministic/coding_standards.py +0 -0
  284. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/deterministic/registry.py +0 -0
  285. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/deterministic/tdd.py +0 -0
  286. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/diff.py +0 -0
  287. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/engine.py +0 -0
  288. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/protocols.py +0 -0
  289. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/queries.py +0 -0
  290. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/semantic/__init__.py +0 -0
  291. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/semantic/plan_check.py +0 -0
  292. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/semantic/shadow.py +0 -0
  293. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/semantic/shadow_runner.py +0 -0
  294. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/semantic/supervisor.py +0 -0
  295. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/semantic/verdict.py +0 -0
  296. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/store.py +0 -0
  297. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/supervisor_lane_degrade.py +0 -0
  298. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/team/__init__.py +0 -0
  299. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/team/config.py +0 -0
  300. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/team/handlers.py +0 -0
  301. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/team/prompts.py +0 -0
  302. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/policy/types.py +0 -0
  303. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/__init__.py +0 -0
  304. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/accounting_persistence.py +0 -0
  305. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/audit_logger.py +0 -0
  306. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/base_client.py +0 -0
  307. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/client_adapter.py +0 -0
  308. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/client_factory.py +0 -0
  309. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/cost_logger.py +0 -0
  310. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/cost_tracker.py +0 -0
  311. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/data_models.py +0 -0
  312. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/error_hints.py +0 -0
  313. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/metrics.py +0 -0
  314. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/model_routes.py +0 -0
  315. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/passthrough.py +0 -0
  316. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/ports.py +0 -0
  317. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/provider_trace_logger.py +0 -0
  318. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/proxies.py +0 -0
  319. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/proxy_identity.py +0 -0
  320. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/proxy_orchestrator.py +0 -0
  321. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/proxy_startup.py +0 -0
  322. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/request_id.py +0 -0
  323. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/response_headers.py +0 -0
  324. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/responses_ingress.py +0 -0
  325. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/responses_passthrough.py +0 -0
  326. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/runtime_truth.py +0 -0
  327. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/sse_framing.py +0 -0
  328. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/stream_relay.py +0 -0
  329. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/proxy/utils.py +0 -0
  330. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/__init__.py +0 -0
  331. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/adversarial.py +0 -0
  332. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/consensus.py +0 -0
  333. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/engine.py +0 -0
  334. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/resources/__init__.py +0 -0
  335. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/resources/code_consensus_evaluation.md +0 -0
  336. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/resources/code_debate_evaluation.md +0 -0
  337. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/resources/codereview-performance.md +0 -0
  338. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/resources/codereview-quick.md +0 -0
  339. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/resources/codereview-security.md +0 -0
  340. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/resources/codereview.md +0 -0
  341. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/resources/consensus_evaluation.md +0 -0
  342. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/resources/debate_evaluation.md +0 -0
  343. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/resources/docreview-quick.md +0 -0
  344. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/resources/docreview.md +0 -0
  345. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/resources/thinkdeep.md +0 -0
  346. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/routing.py +0 -0
  347. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/synthesis.py +0 -0
  348. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/review/worker_preparation.py +0 -0
  349. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/runtime_config.py +0 -0
  350. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/search/__init__.py +0 -0
  351. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/search/bm25_store.py +0 -0
  352. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/search/content_store.py +0 -0
  353. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/search/engine.py +0 -0
  354. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/search/exceptions.py +0 -0
  355. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/search/extractor.py +0 -0
  356. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/search/index_state.py +0 -0
  357. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/search/store.py +0 -0
  358. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/search/tokenizer.py +0 -0
  359. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/__init__.py +0 -0
  360. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/active.py +0 -0
  361. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/addendum.py +0 -0
  362. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/artifacts.py +0 -0
  363. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/authority.py +0 -0
  364. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/claude/__init__.py +0 -0
  365. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/claude/cleanup.py +0 -0
  366. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/claude/invoke.py +0 -0
  367. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/claude/paths.py +0 -0
  368. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/claude/relocate.py +0 -0
  369. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/cleanup.py +0 -0
  370. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/codex_handoff.py +0 -0
  371. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/codex_invoke.py +0 -0
  372. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/config.py +0 -0
  373. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/consumer_lanes.py +0 -0
  374. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/context_limit.py +0 -0
  375. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/context_rendering.py +0 -0
  376. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/effective.py +0 -0
  377. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/events.py +0 -0
  378. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/exceptions.py +0 -0
  379. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/git.py +0 -0
  380. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/hooks/__init__.py +0 -0
  381. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/hooks/models.py +0 -0
  382. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/hooks/session_start.py +0 -0
  383. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/identity.py +0 -0
  384. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/index.py +0 -0
  385. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/launch.py +0 -0
  386. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/launch_confirmation.py +0 -0
  387. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/launchability.py +0 -0
  388. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/manager.py +0 -0
  389. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/memory_inheritance.py +0 -0
  390. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/memory_writer.py +0 -0
  391. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/model_pin.py +0 -0
  392. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/models.py +0 -0
  393. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/overrides.py +0 -0
  394. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/passport.py +0 -0
  395. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/plan_resolution.py +0 -0
  396. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/prev_sessions.py +0 -0
  397. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/project_memory.py +0 -0
  398. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/rewind.py +0 -0
  399. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/routing.py +0 -0
  400. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/shadow_curation.py +0 -0
  401. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/store.py +0 -0
  402. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/transfer.py +0 -0
  403. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/validation.py +0 -0
  404. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/verification_config.py +0 -0
  405. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/workspace.py +0 -0
  406. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/worktree/__init__.py +0 -0
  407. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/worktree/cleanup.py +0 -0
  408. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/worktree/config_copy.py +0 -0
  409. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/session/worktree/create.py +0 -0
  410. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/sidecar/__init__.py +0 -0
  411. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/sidecar/container.py +0 -0
  412. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/forge/sidecar/docker.py +0 -0
  413. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/analyze/content.md +0 -0
  414. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/analyze/forge-skill.yaml +0 -0
  415. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/challenge/content.md +0 -0
  416. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/challenge/forge-skill.yaml +0 -0
  417. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/consensus/content.md +0 -0
  418. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/consensus/forge-skill.yaml +0 -0
  419. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/consensus/resources/synthesis.md +0 -0
  420. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/debate/content.md +0 -0
  421. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/debate/forge-skill.yaml +0 -0
  422. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/panel/content.md +0 -0
  423. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/panel/forge-skill.yaml +0 -0
  424. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/panel/resources/synthesis.md +0 -0
  425. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/SKILL.md +0 -0
  426. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/0-enable.md +0 -0
  427. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/1-preflight.md +0 -0
  428. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/10-resume.md +0 -0
  429. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/11-config.md +0 -0
  430. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/12-search.md +0 -0
  431. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/13-policy.md +0 -0
  432. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/14-workflow.md +0 -0
  433. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/15-skills.md +0 -0
  434. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/16-memory.md +0 -0
  435. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/17-info.md +0 -0
  436. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/18-disable.md +0 -0
  437. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/19-uninstall.md +0 -0
  438. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/2-extension.md +0 -0
  439. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/20-cleanup.md +0 -0
  440. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/3-authentication.md +0 -0
  441. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/5-session.md +0 -0
  442. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/6-hook.md +0 -0
  443. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/7-costs.md +0 -0
  444. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/8-status-line.md +0 -0
  445. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/9-direct-commands.md +0 -0
  446. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/coverage-map.md +0 -0
  447. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/execution-budget.json +0 -0
  448. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/report-template.md +0 -0
  449. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/resources/runtime-matrix.json +0 -0
  450. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/scripts/qa-artifact.py +0 -0
  451. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/scripts/qa-run-metrics.py +0 -0
  452. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/scripts/qa-selection.py +0 -0
  453. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/scripts/start-container.sh +0 -0
  454. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/qa/scripts/walkthrough-state.py +0 -0
  455. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review/content.md +0 -0
  456. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review/forge-skill.yaml +0 -0
  457. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review/references/claude-4.6.md +0 -0
  458. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review/references/claude-4.8.md +0 -0
  459. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review/references/gemini-3.1.md +0 -0
  460. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review/references/gpt-5.5.md +0 -0
  461. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review/references/skills-writing-guide.md +0 -0
  462. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review/resources/code-anthropic.md +0 -0
  463. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review/resources/code-gemini.md +0 -0
  464. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review/resources/code-openai.md +0 -0
  465. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review/resources/code.md +0 -0
  466. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review-docs/content.md +0 -0
  467. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review-docs/forge-skill.yaml +0 -0
  468. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review-docs/resources/docs-anthropic.md +0 -0
  469. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review-docs/resources/docs-gemini.md +0 -0
  470. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review-docs/resources/docs-openai.md +0 -0
  471. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/review-docs/resources/docs.md +0 -0
  472. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/smoke-test/content.md +0 -0
  473. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/smoke-test/forge-skill.yaml +0 -0
  474. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/smoke-test/scripts/smoke-test.sh +0 -0
  475. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/understand/content.md +0 -0
  476. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/understand/forge-skill.yaml +0 -0
  477. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/understand/resources/code-anthropic.md +0 -0
  478. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/understand/resources/code-gemini.md +0 -0
  479. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/understand/resources/code-openai.md +0 -0
  480. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/understand/resources/code.md +0 -0
  481. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/understand/resources/docs-anthropic.md +0 -0
  482. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/understand/resources/docs-gemini.md +0 -0
  483. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/understand/resources/docs-openai.md +0 -0
  484. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/understand/resources/docs.md +0 -0
  485. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/walkthrough/SKILL.md +0 -0
  486. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/walkthrough/resources/checklist.md +0 -0
  487. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/walkthrough/resources/journey-map.md +0 -0
  488. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/claude-wrapper.sh +0 -0
  489. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/cleanup-owned.sh +0 -0
  490. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/package-identity.py +0 -0
  491. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/protected-paths.py +0 -0
  492. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/run-in-repo.sh +0 -0
  493. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/setup-test-repo.sh +0 -0
  494. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/walkthrough-report.py +0 -0
  495. {multi_forge-1.0.1 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/walkthrough-state.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: multi-forge
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Summary: Multi-runtime agent toolkit: proxy routing, cost control, session management, policy enforcement, and workflow orchestration
5
5
  Project-URL: Homepage, https://github.com/hapa1i/multi-forge
6
6
  Project-URL: Repository, https://github.com/hapa1i/multi-forge
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "multi-forge"
3
- version = "1.0.1"
3
+ version = "1.0.2"
4
4
  description = "Multi-runtime agent toolkit: proxy routing, cost control, session management, policy enforcement, and workflow orchestration"
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -129,8 +129,9 @@ def _build_bare_launch_env(
129
129
  env_vars["ANTHROPIC_BASE_URL"] = base_url
130
130
  if context_limit is not None:
131
131
  env_vars["CLAUDE_CODE_AUTO_COMPACT_WINDOW"] = str(context_limit)
132
- apply_proxy_context_model_defaults(env_vars, context_limit)
133
- if wire_shape := resolve_proxy_wire_shape(proxy_id=proxy_id, template=template):
132
+ wire_shape = resolve_proxy_wire_shape(proxy_id=proxy_id, template=template)
133
+ apply_proxy_context_model_defaults(env_vars, context_limit, wire_shape=wire_shape)
134
+ if wire_shape:
134
135
  env_vars[FORGE_PROXY_WIRE_SHAPE_VAR] = wire_shape
135
136
  if template:
136
137
  env_vars["ACTIVE_TEMPLATE"] = template
@@ -14,7 +14,7 @@
14
14
  # - gemini/gemini-2.5-pro
15
15
  #
16
16
  # Anthropic (requires ANTHROPIC_API_KEY):
17
- # - anthropic/claude-haiku-4-5, claude-sonnet-5, claude-opus-5-5, claude-opus-5
17
+ # - anthropic/claude-haiku-4-5, claude-sonnet-5-5, claude-sonnet-5, claude-opus-5-5, claude-opus-5
18
18
  # - anthropic/claude-fable-5-1, claude-fable-5
19
19
  # - anthropic/claude-opus-4-8, claude-opus-4-6, claude-sonnet-4-6
20
20
  #
@@ -26,7 +26,7 @@
26
26
  # - openai/gpt-5.4, gpt-5.4-pro
27
27
  # - openai/gpt-5.5
28
28
  # - openai/gpt-5.6, gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna
29
- # - openai/gpt-6-astra, gpt-6-sol, gpt-6-luna
29
+ # - openai/gpt-6-astra, gpt-6.1-sol, gpt-6-sol, gpt-6-luna
30
30
  #
31
31
  # Start with: forge model backend start litellm --port 4000
32
32
 
@@ -140,6 +140,44 @@ model_list:
140
140
  model: anthropic/claude-haiku-4-5
141
141
  api_key: os.environ/ANTHROPIC_API_KEY
142
142
 
143
+ # LiteLLM 1.102 predates Sonnet 5.5; supply offline pricing and effort capabilities.
144
+ # https://platform.claude.com/docs/en/models/sonnet-5-5/overview (verified 2026-10-01)
145
+ - model_name: anthropic/claude-sonnet-5-5
146
+ litellm_params:
147
+ model: anthropic/claude-sonnet-5-5
148
+ api_key: os.environ/ANTHROPIC_API_KEY
149
+ model_info:
150
+ base_model: claude-sonnet-5-5
151
+ mode: chat
152
+ max_input_tokens: 1000000
153
+ max_output_tokens: 128000
154
+ max_tokens: 128000
155
+ input_cost_per_token: 0.000002
156
+ output_cost_per_token: 0.000010
157
+ cache_creation_input_token_cost: 0.0000025
158
+ cache_creation_input_token_cost_above_1hr: 0.000004
159
+ cache_read_input_token_cost: 0.0000002
160
+ supports_vision: true
161
+ supports_function_calling: true
162
+ supports_tool_choice: true
163
+ supports_prompt_caching: true
164
+ prompt_cache_min_tokens: 512
165
+ supports_reasoning: true
166
+ supports_adaptive_thinking: true
167
+ supports_legacy_thinking: false
168
+ # Keep disabled visible to upstream validation; dropping it would turn thinking on.
169
+ thinking_always_on: false
170
+ supports_output_config: true
171
+ supports_xhigh_reasoning_effort: true
172
+ supports_max_reasoning_effort: true
173
+ default_reasoning_effort: high
174
+ reasoning_effort_levels: [low, medium, high, xhigh, max]
175
+ supports_response_schema: true
176
+ supports_native_structured_output: true
177
+ supports_assistant_prefill: false
178
+ provider_specific_entry:
179
+ us: 1.1
180
+
143
181
  - model_name: anthropic/claude-sonnet-5
144
182
  litellm_params:
145
183
  model: anthropic/claude-sonnet-5
@@ -340,6 +378,56 @@ model_list:
340
378
  model: openai/gpt-6-astra
341
379
  api_key: os.environ/OPENAI_API_KEY
342
380
 
381
+ # LiteLLM 1.102 predates GPT-6.1 Sol; cached reads are 5% of input, including the >272k premium.
382
+ # https://developers.openai.com/api/docs/models/gpt-6.1-sol (verified 2026-10-01)
383
+ - model_name: openai/gpt-6.1-sol
384
+ litellm_params:
385
+ model: openai/gpt-6.1-sol
386
+ api_key: os.environ/OPENAI_API_KEY
387
+ use_responses_api: true
388
+ model_info:
389
+ base_model: gpt-6.1-sol
390
+ mode: responses
391
+ max_input_tokens: 922000
392
+ max_output_tokens: 128000
393
+ max_tokens: 128000
394
+ input_cost_per_token: 0.000002
395
+ output_cost_per_token: 0.000010
396
+ cache_read_input_token_cost: 0.0000001
397
+ cache_creation_input_token_cost: 0.0000025
398
+ input_cost_per_token_above_272k_tokens: 0.000004
399
+ output_cost_per_token_above_272k_tokens: 0.000015
400
+ cache_read_input_token_cost_above_272k_tokens: 0.0000002
401
+ cache_creation_input_token_cost_above_272k_tokens: 0.000005
402
+ input_cost_per_token_flex: 0.000001
403
+ output_cost_per_token_flex: 0.000005
404
+ cache_read_input_token_cost_flex: 0.00000005
405
+ cache_creation_input_token_cost_flex: 0.00000125
406
+ input_cost_per_token_above_272k_tokens_flex: 0.000002
407
+ output_cost_per_token_above_272k_tokens_flex: 0.0000075
408
+ cache_read_input_token_cost_above_272k_tokens_flex: 0.0000001
409
+ cache_creation_input_token_cost_above_272k_tokens_flex: 0.0000025
410
+ input_cost_per_token_priority: 0.000004
411
+ output_cost_per_token_priority: 0.000020
412
+ cache_read_input_token_cost_priority: 0.0000002
413
+ cache_creation_input_token_cost_priority: 0.000005
414
+ input_cost_per_token_above_272k_tokens_priority: 0.000008
415
+ output_cost_per_token_above_272k_tokens_priority: 0.000030
416
+ cache_read_input_token_cost_above_272k_tokens_priority: 0.0000004
417
+ cache_creation_input_token_cost_above_272k_tokens_priority: 0.000010
418
+ supports_vision: true
419
+ supports_function_calling: true
420
+ supports_parallel_function_calling: true
421
+ supports_tool_choice: true
422
+ supports_prompt_caching: true
423
+ supports_reasoning: true
424
+ supports_none_reasoning_effort: false
425
+ supports_xhigh_reasoning_effort: true
426
+ supports_max_reasoning_effort: true
427
+ default_reasoning_effort: medium
428
+ reasoning_effort_levels: [low, medium, high, xhigh, max]
429
+ supports_response_schema: true
430
+
343
431
  # LiteLLM 1.102 predates Sol and Luna. Standard, Flex and Fast rates include the >272k-token premium.
344
432
  # Flex costs half of standard; Fast (also called priority) costs twice the applicable rate.
345
433
  # Remove these overrides when bundled metadata covers them; test_litellm_model_metadata pins that boundary.
@@ -27,5 +27,5 @@ proxy:
27
27
  litellm:
28
28
  tiers:
29
29
  haiku: claude-haiku-4-5
30
- sonnet: claude-sonnet-5
30
+ sonnet: claude-sonnet-5-5
31
31
  opus: claude-opus-5-5
@@ -30,10 +30,12 @@ proxy:
30
30
  haiku:
31
31
  gpt-6-luna: openai/gpt-6-luna
32
32
  sonnet:
33
+ gpt-6.1-sol: openai/gpt-6.1-sol
33
34
  gpt-6-sol: openai/gpt-6-sol
34
35
  gpt-6-luna: openai/gpt-6-luna
35
36
  gpt-5.6-sol: openai/gpt-5.6-sol
36
37
  opus:
38
+ gpt-6.1-sol: openai/gpt-6.1-sol
37
39
  gpt-6-sol: openai/gpt-6-sol
38
40
  gpt-6-luna: openai/gpt-6-luna
39
41
  gpt-5.6-sol: openai/gpt-5.6-sol
@@ -6,9 +6,9 @@
6
6
  #
7
7
  # Backend (LiteLLM on port 4000) starts automatically.
8
8
  #
9
- # Defaults: sonnet tier -> Sonnet 5, opus tier -> Opus 5.5. Alternatives are
9
+ # Defaults: sonnet tier -> Sonnet 5.5, opus tier -> Opus 5.5. Alternatives are
10
10
  # claude-opus-5, claude-fable-5-1, claude-fable-5, claude-opus-4-8, claude-opus-4-6,
11
- # and claude-sonnet-4-6.
11
+ # claude-sonnet-5, and claude-sonnet-4-6.
12
12
  #
13
13
  # After adding ANTHROPIC_API_KEY, stop the backend so Forge restarts it with the new environment:
14
14
  # forge model backend stop litellm-4000
@@ -22,7 +22,7 @@ proxy:
22
22
  litellm:
23
23
  tiers:
24
24
  haiku: anthropic/claude-haiku-4-5
25
- sonnet: anthropic/claude-sonnet-5
25
+ sonnet: anthropic/claude-sonnet-5-5
26
26
  opus: anthropic/claude-opus-5-5
27
27
  model_alternatives:
28
28
  opus:
@@ -32,6 +32,7 @@ proxy:
32
32
  claude-opus-4-8: anthropic/claude-opus-4-8
33
33
  claude-opus-4-6: anthropic/claude-opus-4-6
34
34
  sonnet:
35
+ claude-sonnet-5: anthropic/claude-sonnet-5
35
36
  claude-sonnet-4-6: anthropic/claude-sonnet-4-6
36
37
  prompt_caching: passthrough
37
38
  error_hints: true
@@ -1,13 +1,13 @@
1
1
  # Template: litellm-anthropic
2
2
  # Anthropic Claude via remote/shared LiteLLM
3
3
  #
4
- # Access to Claude Opus 5.5/5, Sonnet 5, Fable 5.1/5, Opus 4.8/4.6, Sonnet 4.6, and Haiku 4.5.
4
+ # Access to Claude Opus 5.5/5, Sonnet 5.5/5, Fable 5.1/5, Opus 4.8/4.6, Sonnet 4.6, and Haiku 4.5.
5
5
  # Requires LITELLM_API_KEY and LITELLM_BASE_URL in .env (or environment).
6
- # NOTE: the shared LiteLLM instance must serve anthropic/claude-opus-5-5 and anthropic/claude-sonnet-5.
6
+ # NOTE: the shared LiteLLM instance must serve anthropic/claude-opus-5-5 and anthropic/claude-sonnet-5-5.
7
7
  #
8
- # Defaults: sonnet tier -> Sonnet 5, opus tier -> Opus 5.5. Alternatives are
8
+ # Defaults: sonnet tier -> Sonnet 5.5, opus tier -> Opus 5.5. Alternatives are
9
9
  # claude-opus-5, claude-fable-5-1, claude-fable-5, claude-opus-4-8, claude-opus-4-6,
10
- # and claude-sonnet-4-6.
10
+ # claude-sonnet-5, and claude-sonnet-4-6.
11
11
  # prompt_caching: passthrough respects Anthropic's 4-breakpoint cache_control limit.
12
12
 
13
13
  proxy:
@@ -19,7 +19,7 @@ proxy:
19
19
  litellm:
20
20
  tiers:
21
21
  haiku: anthropic/claude-haiku-4-5
22
- sonnet: anthropic/claude-sonnet-5
22
+ sonnet: anthropic/claude-sonnet-5-5
23
23
  opus: anthropic/claude-opus-5-5
24
24
  model_alternatives:
25
25
  opus:
@@ -29,6 +29,7 @@ proxy:
29
29
  claude-opus-4-8: anthropic/claude-opus-4-8
30
30
  claude-opus-4-6: anthropic/claude-opus-4-6
31
31
  sonnet:
32
+ claude-sonnet-5: anthropic/claude-sonnet-5
32
33
  claude-sonnet-4-6: anthropic/claude-sonnet-4-6
33
34
  prompt_caching: passthrough
34
35
  error_hints: true
@@ -24,9 +24,11 @@ proxy:
24
24
  haiku:
25
25
  gpt-6-luna: openai/gpt-6-luna
26
26
  sonnet:
27
+ gpt-6.1-sol: openai/gpt-6.1-sol
27
28
  gpt-6-sol: openai/gpt-6-sol
28
29
  gpt-6-luna: openai/gpt-6-luna
29
30
  opus:
31
+ gpt-6.1-sol: openai/gpt-6.1-sol
30
32
  gpt-6-sol: openai/gpt-6-sol
31
33
  gpt-6-luna: openai/gpt-6-luna
32
34
  gpt-5.6-sol: openai/gpt-5.6-sol
@@ -24,10 +24,12 @@ proxy:
24
24
  haiku:
25
25
  gpt-6-luna: openai/gpt-6-luna
26
26
  sonnet:
27
+ gpt-6.1-sol: openai/gpt-6.1-sol
27
28
  gpt-6-sol: openai/gpt-6-sol
28
29
  gpt-6-luna: openai/gpt-6-luna
29
30
  gpt-5.6-sol: openai/gpt-5.6-sol
30
31
  opus:
32
+ gpt-6.1-sol: openai/gpt-6.1-sol
31
33
  gpt-6-sol: openai/gpt-6-sol
32
34
  gpt-6-luna: openai/gpt-6-luna
33
35
  gpt-5.6-sol: openai/gpt-5.6-sol
@@ -22,10 +22,12 @@ proxy:
22
22
  haiku:
23
23
  gpt-6-luna: openai/gpt-6-luna
24
24
  sonnet:
25
+ gpt-6.1-sol: openai/gpt-6.1-sol
25
26
  gpt-6-sol: openai/gpt-6-sol
26
27
  gpt-6-luna: openai/gpt-6-luna
27
28
  gpt-5.6-sol: openai/gpt-5.6-sol
28
29
  opus:
30
+ gpt-6.1-sol: openai/gpt-6.1-sol
29
31
  gpt-6-sol: openai/gpt-6-sol
30
32
  gpt-6-luna: openai/gpt-6-luna
31
33
  gpt-5.6-sol: openai/gpt-5.6-sol
@@ -1,12 +1,12 @@
1
1
  # Template: openrouter-anthropic
2
2
  # Anthropic Claude models via OpenRouter (direct, no LiteLLM)
3
3
  #
4
- # Access to Claude Opus 5.5/5, Sonnet 5, Fable 5.1/5, Opus 4.8/4.6, Sonnet 4.6, and Haiku 4.5.
4
+ # Access to Claude Opus 5.5/5, Sonnet 5.5/5, Fable 5.1/5, Opus 4.8/4.6, Sonnet 4.6, and Haiku 4.5.
5
5
  # Requires OPENROUTER_API_KEY in .env (or environment).
6
6
  #
7
- # Defaults: sonnet tier -> Sonnet 5, opus tier -> Opus 5.5. Alternatives are
7
+ # Defaults: sonnet tier -> Sonnet 5.5, opus tier -> Opus 5.5. Alternatives are
8
8
  # claude-opus-5, claude-fable-5-1, claude-fable-5, claude-opus-4-8, claude-opus-4-6,
9
- # and claude-sonnet-4-6.
9
+ # claude-sonnet-5, and claude-sonnet-4-6.
10
10
 
11
11
  proxy:
12
12
  family: anthropic
@@ -18,7 +18,7 @@ proxy:
18
18
  allow_non_zdr: false
19
19
  tiers:
20
20
  haiku: anthropic/claude-haiku-4.5
21
- sonnet: anthropic/claude-sonnet-5
21
+ sonnet: anthropic/claude-sonnet-5.5
22
22
  opus: anthropic/claude-opus-5.5
23
23
  zdr_fallbacks:
24
24
  anthropic/claude-fable-5.1: anthropic/claude-opus-5.5
@@ -31,5 +31,6 @@ proxy:
31
31
  claude-opus-4-8: anthropic/claude-opus-4.8
32
32
  claude-opus-4-6: anthropic/claude-opus-4.6
33
33
  sonnet:
34
+ claude-sonnet-5: anthropic/claude-sonnet-5
34
35
  claude-sonnet-4-6: anthropic/claude-sonnet-4.6
35
36
  error_hints: true
@@ -20,11 +20,13 @@ proxy:
20
20
  gpt-6-luna: openai/gpt-6-luna
21
21
  gpt-6-luna-pro: openai/gpt-6-luna-pro
22
22
  sonnet:
23
+ gpt-6.1-sol: openai/gpt-6.1-sol
23
24
  gpt-6-sol: openai/gpt-6-sol
24
25
  gpt-6-sol-pro: openai/gpt-6-sol-pro
25
26
  gpt-6-luna: openai/gpt-6-luna
26
27
  gpt-6-luna-pro: openai/gpt-6-luna-pro
27
28
  opus:
29
+ gpt-6.1-sol: openai/gpt-6.1-sol
28
30
  gpt-6-sol: openai/gpt-6-sol
29
31
  gpt-6-sol-pro: openai/gpt-6-sol-pro
30
32
  gpt-6-luna: openai/gpt-6-luna
@@ -1,7 +1,7 @@
1
1
  # Template: openrouter-openai
2
2
  # OpenAI models via OpenRouter (direct, no LiteLLM)
3
3
  #
4
- # Access to GPT-6 Astra, Sol, Luna, their Pro variants, and GPT-5.4-mini.
4
+ # Access to GPT-6.1 Sol, GPT-6 Astra/Sol/Luna and their Pro variants, and GPT-5.4-mini.
5
5
  # Requires OPENROUTER_API_KEY in .env (or environment).
6
6
  #
7
7
  # Haiku uses gpt-5.4-mini; sonnet and opus both use gpt-6-astra,
@@ -24,6 +24,7 @@ proxy:
24
24
  gpt-6-luna: openai/gpt-6-luna
25
25
  gpt-6-luna-pro: openai/gpt-6-luna-pro
26
26
  sonnet:
27
+ gpt-6.1-sol: openai/gpt-6.1-sol
27
28
  gpt-6-sol: openai/gpt-6-sol
28
29
  gpt-6-sol-pro: openai/gpt-6-sol-pro
29
30
  gpt-6-luna: openai/gpt-6-luna
@@ -31,6 +32,7 @@ proxy:
31
32
  gpt-5.6-sol: openai/gpt-5.6-sol
32
33
  gpt-6-astra-pro: openai/gpt-6-astra-pro
33
34
  opus:
35
+ gpt-6.1-sol: openai/gpt-6.1-sol
34
36
  gpt-6-sol: openai/gpt-6-sol
35
37
  gpt-6-sol-pro: openai/gpt-6-sol-pro
36
38
  gpt-6-luna: openai/gpt-6-luna
@@ -85,6 +85,7 @@ OPENAI_MODELS = [
85
85
  "gpt-5.6-luna",
86
86
  "gpt-6-astra",
87
87
  "gpt-6-astra-pro",
88
+ "gpt-6.1-sol",
88
89
  "gpt-6-sol",
89
90
  "gpt-6-sol-pro",
90
91
  "gpt-6-luna",
@@ -1058,10 +1059,14 @@ def _validate_static_tier_override_constraints(tiers: TierModels, overrides: Tie
1058
1059
  "set that effort or remove the temperature override"
1059
1060
  )
1060
1061
 
1061
- if spec.thinking_modes == ("adaptive",) and override.thinking_budget_tokens is not None:
1062
+ if (
1063
+ spec.thinking_modes is not None
1064
+ and "enabled" not in spec.thinking_modes
1065
+ and override.thinking_budget_tokens is not None
1066
+ ):
1062
1067
  raise ValueError(
1063
1068
  f"tier_overrides.{tier}.thinking_budget_tokens is not supported by {canonical_model}; "
1064
- "this model only supports adaptive thinking"
1069
+ "use reasoning_effort instead of a manual thinking budget"
1065
1070
  )
1066
1071
 
1067
1072
  if (
@@ -43,11 +43,11 @@ defaults:
43
43
  opus: gemini-3.1-pro-preview
44
44
  anthropic:
45
45
  haiku: claude-haiku-4-5-20251001
46
- sonnet: claude-sonnet-5
46
+ sonnet: claude-sonnet-5-5
47
47
  opus: claude-opus-5-5
48
48
  openrouter:
49
49
  haiku: claude-haiku-4-5-20251001
50
- sonnet: claude-sonnet-5
50
+ sonnet: claude-sonnet-5-5
51
51
  opus: claude-opus-5-5
52
52
  deepseek:
53
53
  haiku: deepseek-v4-flash
@@ -126,6 +126,31 @@ models:
126
126
  system_prompt_addendum: system_prompt_addendums/openai.md
127
127
  tags: []
128
128
 
129
+ # https://developers.openai.com/api/docs/models/gpt-6.1-sol
130
+ gpt-6.1-sol:
131
+ friendly_name: GPT-6.1 Sol
132
+ context_window_tokens: 1050000
133
+ max_output_tokens: 128000
134
+ max_thinking_tokens: null
135
+ supports_thinking: true
136
+ supports_images: true
137
+ supports_verbosity: true
138
+ verbosity_levels: [low, medium, high]
139
+ temperature_constraint: fixed
140
+ temperature: 1.0
141
+ supports_top_p: false
142
+ supports_sampling_overrides: false
143
+ default_timeout_seconds: 180
144
+ prompt_caching:
145
+ supports: true
146
+ mechanism: auto
147
+ native_thinking_param: reasoning_effort
148
+ litellm_reasoning_efforts: [low, medium, high, xhigh, max]
149
+ default_reasoning_effort: medium
150
+ use_responses_api: true
151
+ system_prompt_addendum: system_prompt_addendums/openai.md
152
+ tags: []
153
+
129
154
  gpt-6-sol:
130
155
  friendly_name: GPT-6 Sol
131
156
  context_window_tokens: 1050000
@@ -1273,6 +1298,7 @@ models:
1273
1298
  max_cache_blocks: 4
1274
1299
  native_thinking_param: output_config.effort
1275
1300
  thinking_modes: [adaptive]
1301
+ supports_forced_tool_choice: false
1276
1302
  litellm_reasoning_efforts: [low, medium, high, xhigh, max]
1277
1303
  default_reasoning_effort: medium
1278
1304
  token_estimate_multiplier: 1.35
@@ -1360,10 +1386,36 @@ models:
1360
1386
  token_estimate_multiplier: 1.35
1361
1387
  tags: [opt-in]
1362
1388
 
1363
- # --- Claude Sonnet 5 ---
1364
- # Sonnet 5 is the default sonnet tier (anthropic + openrouter) and shares the
1365
- # Opus 4.8 request surface: adaptive-only thinking, sampling overrides removed,
1366
- # native 1M context. Single canonical id (no -1m twin).
1389
+ # Sonnet 5.5 uses between_tools instead of disabled for no up-front thinking.
1390
+ # https://platform.claude.com/docs/en/models/sonnet-5-5/overview
1391
+ claude-sonnet-5-5:
1392
+ friendly_name: Claude Sonnet 5.5
1393
+ context_window_tokens: 1000000
1394
+ max_output_tokens: 128000
1395
+ max_thinking_tokens: 128000
1396
+ supports_thinking: true
1397
+ supports_images: true
1398
+ supports_1m_context: true
1399
+ temperature_constraint: fixed
1400
+ temperature: 1.0
1401
+ supports_top_p: false
1402
+ supports_sampling_overrides: false
1403
+ default_timeout_seconds: 180
1404
+ prompt_caching:
1405
+ supports: true
1406
+ mechanism: cache_control
1407
+ min_tokens: 512
1408
+ max_cache_blocks: 4
1409
+ native_thinking_param: output_config.effort
1410
+ thinking_modes: [adaptive, between_tools]
1411
+ supports_forced_tool_choice: false
1412
+ between_tools_reasoning_efforts: [low, medium, high]
1413
+ litellm_reasoning_efforts: [low, medium, high, xhigh, max]
1414
+ default_reasoning_effort: high
1415
+ token_estimate_multiplier: 1.35
1416
+ tags: []
1417
+
1418
+ # Sonnet 5 remains selectable by its explicit version.
1367
1419
  claude-sonnet-5:
1368
1420
  friendly_name: Claude Sonnet 5
1369
1421
  context_window_tokens: 1000000
@@ -2235,8 +2287,9 @@ aliases:
2235
2287
  astra-pro: gpt-6-astra-pro
2236
2288
  gpt-astra-pro: gpt-6-astra-pro
2237
2289
  openai/gpt-6-astra-pro: gpt-6-astra-pro
2238
- sol: gpt-6-sol
2239
- gpt-sol: gpt-6-sol
2290
+ sol: gpt-6.1-sol
2291
+ gpt-sol: gpt-6.1-sol
2292
+ openai/gpt-6.1-sol: gpt-6.1-sol
2240
2293
  openai/gpt-6-sol: gpt-6-sol
2241
2294
  sol-pro: gpt-6-sol-pro
2242
2295
  gpt-sol-pro: gpt-6-sol-pro
@@ -2361,11 +2414,17 @@ aliases:
2361
2414
  anthropic/claude-fable-5: claude-fable-5
2362
2415
  fable-5: claude-fable-5
2363
2416
 
2364
- # Sonnet 5 (default sonnet tier; released on Anthropic + OpenRouter, native 1M)
2417
+ # Sonnet 5.5 (default sonnet tier; OpenRouter uses a dot-form slug)
2418
+ anthropic/claude-sonnet-5-5: claude-sonnet-5-5
2419
+ anthropic/claude-sonnet-5.5: claude-sonnet-5-5
2420
+ claude-sonnet-5.5: claude-sonnet-5-5
2421
+ sonnet-5.5: claude-sonnet-5-5
2422
+ sonnet-5-5: claude-sonnet-5-5
2423
+ claude-sonnet: claude-sonnet-5-5
2424
+ sonnet: claude-sonnet-5-5
2425
+ # Sonnet 5 remains an explicit pin.
2365
2426
  anthropic/claude-sonnet-5: claude-sonnet-5 # also the OpenRouter slug (no dot)
2366
- claude-sonnet: claude-sonnet-5 # parity with claude-opus friendly alias
2367
2427
  sonnet-5: claude-sonnet-5
2368
- sonnet: claude-sonnet-5
2369
2428
 
2370
2429
  # Sonnet 4.6
2371
2430
  anthropic/claude-sonnet-4-6: claude-sonnet-4-6
@@ -74,6 +74,64 @@ models:
74
74
  source_id: openrouter
75
75
  template: openrouter-openai-codex
76
76
  model_ref: openai/gpt-6-astra-pro
77
+ gpt-6.1-sol:
78
+ routes:
79
+ - kind: proxy
80
+ source_id: openrouter
81
+ template: openrouter-openai
82
+ model_ref: openai/gpt-6.1-sol
83
+ - kind: proxy
84
+ source_id: openrouter
85
+ template: openrouter-openai-codex
86
+ model_ref: openai/gpt-6.1-sol
87
+ - kind: proxy
88
+ source_id: openrouter
89
+ template: openrouter-anthropic
90
+ model_ref: openai/gpt-6.1-sol
91
+ - kind: proxy
92
+ source_id: openrouter
93
+ template: openrouter-deepseek
94
+ model_ref: openai/gpt-6.1-sol
95
+ - kind: proxy
96
+ source_id: openrouter
97
+ template: openrouter-gemini
98
+ model_ref: openai/gpt-6.1-sol
99
+ - kind: proxy
100
+ source_id: openrouter
101
+ template: openrouter-gemini-flash
102
+ model_ref: openai/gpt-6.1-sol
103
+ - kind: proxy
104
+ source_id: openrouter
105
+ template: openrouter-glm
106
+ model_ref: openai/gpt-6.1-sol
107
+ - kind: proxy
108
+ source_id: openrouter
109
+ template: openrouter-kimi
110
+ model_ref: openai/gpt-6.1-sol
111
+ - kind: proxy
112
+ source_id: openrouter
113
+ template: openrouter-minimax
114
+ model_ref: openai/gpt-6.1-sol
115
+ - kind: proxy
116
+ source_id: openrouter
117
+ template: openrouter-qwen
118
+ model_ref: openai/gpt-6.1-sol
119
+ - kind: proxy
120
+ source_id: codex-responses-local
121
+ template: codex-responses-local
122
+ model_ref: openai/gpt-6.1-sol
123
+ - kind: proxy
124
+ source_id: litellm-remote
125
+ template: litellm-openai
126
+ model_ref: openai/gpt-6.1-sol
127
+ - kind: proxy
128
+ source_id: litellm-openai-local
129
+ template: litellm-openai-codex-local
130
+ model_ref: openai/gpt-6.1-sol
131
+ - kind: proxy
132
+ source_id: litellm-openai-local
133
+ template: litellm-openai-local
134
+ model_ref: openai/gpt-6.1-sol
77
135
  gpt-6-sol:
78
136
  routes:
79
137
  - kind: proxy
@@ -840,6 +898,11 @@ models:
840
898
  - kind: direct
841
899
  runtime: claude_code
842
900
  model_ref: claude-fable-5
901
+ claude-sonnet-5-5:
902
+ routes:
903
+ - kind: direct
904
+ runtime: claude_code
905
+ model_ref: claude-sonnet-5-5
843
906
  claude-sonnet-5:
844
907
  routes:
845
908
  - kind: direct
@@ -137,18 +137,15 @@ def build_chat_completion_kwargs(
137
137
  if "openai" in hyperparams.extra:
138
138
  kwargs.update(hyperparams.extra["openai"])
139
139
 
140
- _apply_conditional_sampling(model, kwargs)
140
+ _apply_sampling_constraints(model, kwargs)
141
141
  return kwargs
142
142
 
143
143
 
144
- def _apply_conditional_sampling(model: str, kwargs: dict[str, Any]) -> None:
145
- """Enforce effort-dependent sampling after provider extras have been merged."""
144
+ def _apply_sampling_constraints(model: str, kwargs: dict[str, Any]) -> None:
145
+ """Enforce catalog sampling constraints after provider extras have been merged."""
146
146
  if not model_exists(model):
147
147
  return
148
148
  spec = get_model_spec(model)
149
- if not spec.sampling_requires_no_reasoning:
150
- return
151
-
152
149
  extra_body = kwargs.get("extra_body")
153
150
  reasoning = extra_body.get("reasoning") if isinstance(extra_body, dict) else None
154
151
  effort = kwargs.get("reasoning_effort")
@@ -156,7 +153,7 @@ def _apply_conditional_sampling(model: str, kwargs: dict[str, Any]) -> None:
156
153
  effort = reasoning.get("effort")
157
154
  if spec.supports_sampling_at_effort(effort):
158
155
  return
159
- for name in ("temperature", "top_p"):
156
+ for name in ("temperature", "top_p", "top_k"):
160
157
  kwargs.pop(name, None)
161
158
  if isinstance(extra_body, dict) and name in extra_body:
162
159
  # Do not mutate the caller's nested provider extras.
@@ -188,6 +188,7 @@ def _parse_model_spec(model_id: str, data: dict[str, Any]) -> ModelSpec:
188
188
  supports_sampling_overrides=bool(data.get("supports_sampling_overrides", True)),
189
189
  sampling_requires_no_reasoning=bool(data.get("sampling_requires_no_reasoning", False)),
190
190
  supports_1m_context=bool(data.get("supports_1m_context", False)),
191
+ supports_forced_tool_choice=bool(data.get("supports_forced_tool_choice", True)),
191
192
  temperature_constraint=constraint,
192
193
  temperature=temperature,
193
194
  verbosity_levels=verbosity_levels,
@@ -196,6 +197,9 @@ def _parse_model_spec(model_id: str, data: dict[str, Any]) -> ModelSpec:
196
197
  litellm_reasoning_efforts=litellm_reasoning_efforts,
197
198
  default_reasoning_effort=data.get("default_reasoning_effort"),
198
199
  thinking_modes=thinking_modes,
200
+ between_tools_reasoning_efforts=_parse_tuple_or_none(
201
+ model_id, "between_tools_reasoning_efforts", data.get("between_tools_reasoning_efforts")
202
+ ),
199
203
  thinking_levels=thinking_levels,
200
204
  default_thinking_level=data.get("default_thinking_level"),
201
205
  token_estimate_multiplier=float(data.get("token_estimate_multiplier", 1.0)),