multi-forge 1.0.0__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 (496) hide show
  1. {multi_forge-1.0.0 → multi_forge-1.0.2}/PKG-INFO +2 -2
  2. {multi_forge-1.0.0 → multi_forge-1.0.2}/pyproject.toml +4 -6
  3. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/claude.py +3 -2
  4. multi_forge-1.0.2/src/forge/config/defaults/backends/litellm.yaml +547 -0
  5. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/anthropic-passthrough.yaml +2 -2
  6. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/codex-responses-local.yaml +8 -0
  7. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-anthropic-local.yaml +7 -5
  8. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-anthropic.yaml +9 -7
  9. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-gemini-flash-local.yaml +11 -6
  10. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-gemini-local.yaml +10 -3
  11. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-gemini-test.yaml +10 -1
  12. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-gemini.yaml +5 -4
  13. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-openai-codex-local.yaml +9 -0
  14. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-openai-local.yaml +8 -0
  15. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/litellm-openai.yaml +9 -1
  16. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-anthropic.yaml +10 -8
  17. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-deepseek.yaml +9 -0
  18. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-glm.yaml +10 -0
  19. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-openai-codex.yaml +14 -0
  20. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-openai.yaml +14 -1
  21. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-qwen.yaml +9 -1
  22. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/schema.py +22 -2
  23. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/data/model_catalog.yaml +386 -28
  24. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/data/model_routes.yaml +564 -0
  25. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/llm/clients/litellm.py +11 -1
  26. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/llm/clients/openai_compat.py +24 -0
  27. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/models/catalog.py +5 -0
  28. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/models/direct_model.py +14 -6
  29. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/models/types.py +10 -0
  30. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/claude_session.py +6 -1
  31. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/reactive/tagger.py +1 -1
  32. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/semantic/plan_check.py +3 -4
  33. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/team/config.py +1 -1
  34. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/converters.py +23 -1
  35. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/intercept.py +23 -4
  36. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/model_routes.py +6 -4
  37. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/passthrough_ingress.py +11 -1
  38. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/reasoning.py +3 -0
  39. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/server.py +3 -1
  40. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/models.py +30 -11
  41. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/4-proxy.md +14 -6
  42. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist.md +3 -3
  43. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/execution-budget.json +1 -1
  44. multi_forge-1.0.0/src/forge/config/defaults/backends/litellm.yaml +0 -321
  45. {multi_forge-1.0.0 → multi_forge-1.0.2}/.gitignore +0 -0
  46. {multi_forge-1.0.0 → multi_forge-1.0.2}/LICENSE +0 -0
  47. {multi_forge-1.0.0 → multi_forge-1.0.2}/NOTICE +0 -0
  48. {multi_forge-1.0.0 → multi_forge-1.0.2}/README.md +0 -0
  49. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/agents/.gitkeep +0 -0
  50. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/commands/.gitkeep +0 -0
  51. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/__init__.py +0 -0
  52. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/backend/__init__.py +0 -0
  53. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/backend/adapters/__init__.py +0 -0
  54. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/backend/adapters/litellm.py +0 -0
  55. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/backend/creation.py +0 -0
  56. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/backend/registry.py +0 -0
  57. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/backend/remote/__init__.py +0 -0
  58. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/backend/remote/base.py +0 -0
  59. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/backend/remote/openrouter.py +0 -0
  60. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/backend/sources.py +0 -0
  61. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/__init__.py +0 -0
  62. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/activity.py +0 -0
  63. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/auth.py +0 -0
  64. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/backend.py +0 -0
  65. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/codex.py +0 -0
  66. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/config_cmd.py +0 -0
  67. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/consumer_lane_freeze.py +0 -0
  68. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/editor.py +0 -0
  69. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/extensions.py +0 -0
  70. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/gc.py +0 -0
  71. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/guards.py +0 -0
  72. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/__init__.py +0 -0
  73. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/_group.py +0 -0
  74. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/_helpers.py +0 -0
  75. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/authority.py +0 -0
  76. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/codex_patch.py +0 -0
  77. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/codex_policy.py +0 -0
  78. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/codex_transfer.py +0 -0
  79. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/commands.py +0 -0
  80. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/direct_commands.py +0 -0
  81. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/policy.py +0 -0
  82. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/protocols.py +0 -0
  83. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/read_hygiene.py +0 -0
  84. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/hooks/verification.py +0 -0
  85. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/info.py +0 -0
  86. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/logs.py +0 -0
  87. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/main.py +0 -0
  88. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/memory.py +0 -0
  89. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/memory_report.py +0 -0
  90. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/memory_writer.py +0 -0
  91. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/model.py +0 -0
  92. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/output.py +0 -0
  93. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/policy.py +0 -0
  94. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/proxy.py +0 -0
  95. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/proxy_audit.py +0 -0
  96. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/proxy_costs.py +0 -0
  97. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/runtime.py +0 -0
  98. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/search.py +0 -0
  99. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session.py +0 -0
  100. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_adopt.py +0 -0
  101. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_authority.py +0 -0
  102. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_authority_options.py +0 -0
  103. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_codex.py +0 -0
  104. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_fork.py +0 -0
  105. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_lane.py +0 -0
  106. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_lifecycle.py +0 -0
  107. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_manage.py +0 -0
  108. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_memory.py +0 -0
  109. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_model.py +0 -0
  110. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_repair.py +0 -0
  111. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_resume_modes.py +0 -0
  112. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_rewind.py +0 -0
  113. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_route_recovery.py +0 -0
  114. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_routing.py +0 -0
  115. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/session_supervisor_options.py +0 -0
  116. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/status_line.py +0 -0
  117. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/statusline/__init__.py +0 -0
  118. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/statusline/context.py +0 -0
  119. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/statusline/formatting.py +0 -0
  120. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/statusline/names.py +0 -0
  121. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/statusline/palette.py +0 -0
  122. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/statusline/registry.py +0 -0
  123. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/statusline/rendering.py +0 -0
  124. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/statusline/sources.py +0 -0
  125. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/statusline/throttle.py +0 -0
  126. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/statusline/types.py +0 -0
  127. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/telemetry.py +0 -0
  128. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/trace.py +0 -0
  129. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/transfer.py +0 -0
  130. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/workflow.py +0 -0
  131. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/cli/workspace.py +0 -0
  132. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/__init__.py +0 -0
  133. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/dataclass_utils.py +0 -0
  134. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/__init__.py +0 -0
  135. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/backends/__init__.py +0 -0
  136. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/__init__.py +0 -0
  137. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-gemini-flash.yaml +0 -0
  138. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-gemini.yaml +0 -0
  139. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-kimi.yaml +0 -0
  140. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/defaults/templates/openrouter-minimax.yaml +0 -0
  141. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/config/loader.py +0 -0
  142. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/__init__.py +0 -0
  143. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/auth/__init__.py +0 -0
  144. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/auth/capabilities.py +0 -0
  145. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/auth/credentials_file.py +0 -0
  146. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/auth/protocols.py +0 -0
  147. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/auth/secrets.py +0 -0
  148. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/auth/template_secrets.py +0 -0
  149. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/backend_dependency.py +0 -0
  150. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/credential_registry.py +0 -0
  151. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/data/__init__.py +0 -0
  152. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/data/model_practices.yaml +0 -0
  153. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/data/system_prompt_addendums/__init__.py +0 -0
  154. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/data/system_prompt_addendums/gemini.md +0 -0
  155. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/data/system_prompt_addendums/openai.md +0 -0
  156. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/effort.py +0 -0
  157. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/identifiers.py +0 -0
  158. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/invoker/__init__.py +0 -0
  159. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/invoker/_lifecycle.py +0 -0
  160. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/invoker/claude.py +0 -0
  161. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/invoker/codex.py +0 -0
  162. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/invoker/codex_stream.py +0 -0
  163. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/invoker/types.py +0 -0
  164. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/lanes.py +0 -0
  165. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/llm/__init__.py +0 -0
  166. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/llm/clients/__init__.py +0 -0
  167. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/llm/clients/base.py +0 -0
  168. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/llm/clients/openrouter.py +0 -0
  169. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/llm/credentials.py +0 -0
  170. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/llm/detection.py +0 -0
  171. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/llm/errors.py +0 -0
  172. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/llm/openrouter_policy.py +0 -0
  173. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/llm/protocols.py +0 -0
  174. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/llm/types.py +0 -0
  175. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/logging.py +0 -0
  176. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/metric_formatting.py +0 -0
  177. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/models/__init__.py +0 -0
  178. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/models/model_practices.py +0 -0
  179. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/models/model_reference.py +0 -0
  180. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/models/model_routes.py +0 -0
  181. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/naming.py +0 -0
  182. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/__init__.py +0 -0
  183. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/backend_reconcile.py +0 -0
  184. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/codex_adopt.py +0 -0
  185. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/codex_bridge.py +0 -0
  186. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/codex_enrollment.py +0 -0
  187. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/codex_interactive.py +0 -0
  188. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/codex_session.py +0 -0
  189. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/codex_thread_index.py +0 -0
  190. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/context.py +0 -0
  191. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/gc.py +0 -0
  192. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/policy.py +0 -0
  193. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/provider_trace.py +0 -0
  194. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/proxy.py +0 -0
  195. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/resolution.py +0 -0
  196. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/session.py +0 -0
  197. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/session_active.py +0 -0
  198. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/session_adopt.py +0 -0
  199. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/session_authority.py +0 -0
  200. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/session_authority_launch.py +0 -0
  201. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/session_context.py +0 -0
  202. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/session_fork_execution.py +0 -0
  203. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/session_fork_preflight.py +0 -0
  204. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/session_model.py +0 -0
  205. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/session_model_routing.py +0 -0
  206. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/session_repair.py +0 -0
  207. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/session_routing.py +0 -0
  208. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/transfer.py +0 -0
  209. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/usage_summary.py +0 -0
  210. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/ops/workspace.py +0 -0
  211. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/paths.py +0 -0
  212. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/process.py +0 -0
  213. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/provider_types.py +0 -0
  214. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/reactive/__init__.py +0 -0
  215. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/reactive/cost_tracking.py +0 -0
  216. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/reactive/env.py +0 -0
  217. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/reactive/headless_json.py +0 -0
  218. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/reactive/llm_call.py +0 -0
  219. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/reactive/proxy.py +0 -0
  220. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/reactive/routing.py +0 -0
  221. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/reactive/session_runner.py +0 -0
  222. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/reactive/structured_output.py +0 -0
  223. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/reactive/throttle.py +0 -0
  224. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/run_id.py +0 -0
  225. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/runtime/__init__.py +0 -0
  226. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/runtime/codex_preflight.py +0 -0
  227. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/runtime/codex_preflight_cache.py +0 -0
  228. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/runtime/codex_rollouts.py +0 -0
  229. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/runtime/registry.py +0 -0
  230. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/runtime_vocab.py +0 -0
  231. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/state/__init__.py +0 -0
  232. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/state/exceptions.py +0 -0
  233. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/state/io.py +0 -0
  234. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/state/lock.py +0 -0
  235. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/state/retention.py +0 -0
  236. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/state/timestamps.py +0 -0
  237. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/state/versioned_store.py +0 -0
  238. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/telemetry/__init__.py +0 -0
  239. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/telemetry/caps.py +0 -0
  240. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/telemetry/downstream.py +0 -0
  241. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/telemetry/downstream_retention.py +0 -0
  242. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/telemetry/jsonl_io.py +0 -0
  243. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/telemetry/upstream.py +0 -0
  244. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/telemetry/vocabulary.py +0 -0
  245. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/tiers.py +0 -0
  246. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/transcript.py +0 -0
  247. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/typing_helpers.py +0 -0
  248. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/usage/__init__.py +0 -0
  249. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/usage/billing.py +0 -0
  250. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/usage/correlation.py +0 -0
  251. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/usage/emit.py +0 -0
  252. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/usage/ledger.py +0 -0
  253. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/usage/measurement.py +0 -0
  254. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/usage/vocabulary.py +0 -0
  255. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/wire_shapes.py +0 -0
  256. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/workqueue/__init__.py +0 -0
  257. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/workqueue/queue.py +0 -0
  258. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/core/workqueue/types.py +0 -0
  259. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/__init__.py +0 -0
  260. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/codex_hooks.py +0 -0
  261. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/doctor.py +0 -0
  262. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/exceptions.py +0 -0
  263. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/hook_dispatcher.py +0 -0
  264. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/hook_migration.py +0 -0
  265. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/hooks.py +0 -0
  266. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/installer.py +0 -0
  267. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/models.py +0 -0
  268. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/module_planning.py +0 -0
  269. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/ownership.py +0 -0
  270. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/path_policy.py +0 -0
  271. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/preset.py +0 -0
  272. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/project_compat.py +0 -0
  273. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/project_registry.py +0 -0
  274. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/runtime_removal.py +0 -0
  275. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/settings_merge.py +0 -0
  276. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/settings_rollback.py +0 -0
  277. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/skill_cache.py +0 -0
  278. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/skill_compiler.py +0 -0
  279. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/skill_planning.py +0 -0
  280. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/skill_validation.py +0 -0
  281. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/tracking.py +0 -0
  282. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/unmanaged.py +0 -0
  283. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/install/version.py +0 -0
  284. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/__init__.py +0 -0
  285. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/action_identity.py +0 -0
  286. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/deterministic/__init__.py +0 -0
  287. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/deterministic/base.py +0 -0
  288. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/deterministic/coding_standards.py +0 -0
  289. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/deterministic/registry.py +0 -0
  290. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/deterministic/tdd.py +0 -0
  291. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/diff.py +0 -0
  292. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/engine.py +0 -0
  293. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/protocols.py +0 -0
  294. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/queries.py +0 -0
  295. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/semantic/__init__.py +0 -0
  296. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/semantic/shadow.py +0 -0
  297. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/semantic/shadow_runner.py +0 -0
  298. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/semantic/supervisor.py +0 -0
  299. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/semantic/verdict.py +0 -0
  300. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/store.py +0 -0
  301. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/supervisor_lane_degrade.py +0 -0
  302. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/team/__init__.py +0 -0
  303. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/team/handlers.py +0 -0
  304. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/team/prompts.py +0 -0
  305. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/policy/types.py +0 -0
  306. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/__init__.py +0 -0
  307. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/accounting_persistence.py +0 -0
  308. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/audit_logger.py +0 -0
  309. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/base_client.py +0 -0
  310. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/client_adapter.py +0 -0
  311. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/client_factory.py +0 -0
  312. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/cost_logger.py +0 -0
  313. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/cost_tracker.py +0 -0
  314. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/data_models.py +0 -0
  315. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/error_hints.py +0 -0
  316. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/metrics.py +0 -0
  317. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/passthrough.py +0 -0
  318. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/ports.py +0 -0
  319. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/provider_trace_logger.py +0 -0
  320. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/proxies.py +0 -0
  321. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/proxy_identity.py +0 -0
  322. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/proxy_orchestrator.py +0 -0
  323. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/proxy_startup.py +0 -0
  324. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/request_id.py +0 -0
  325. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/response_headers.py +0 -0
  326. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/responses_ingress.py +0 -0
  327. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/responses_passthrough.py +0 -0
  328. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/runtime_truth.py +0 -0
  329. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/sse_framing.py +0 -0
  330. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/stream_relay.py +0 -0
  331. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/proxy/utils.py +0 -0
  332. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/__init__.py +0 -0
  333. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/adversarial.py +0 -0
  334. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/consensus.py +0 -0
  335. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/engine.py +0 -0
  336. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/resources/__init__.py +0 -0
  337. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/resources/code_consensus_evaluation.md +0 -0
  338. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/resources/code_debate_evaluation.md +0 -0
  339. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/resources/codereview-performance.md +0 -0
  340. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/resources/codereview-quick.md +0 -0
  341. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/resources/codereview-security.md +0 -0
  342. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/resources/codereview.md +0 -0
  343. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/resources/consensus_evaluation.md +0 -0
  344. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/resources/debate_evaluation.md +0 -0
  345. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/resources/docreview-quick.md +0 -0
  346. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/resources/docreview.md +0 -0
  347. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/resources/thinkdeep.md +0 -0
  348. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/routing.py +0 -0
  349. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/synthesis.py +0 -0
  350. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/review/worker_preparation.py +0 -0
  351. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/runtime_config.py +0 -0
  352. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/search/__init__.py +0 -0
  353. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/search/bm25_store.py +0 -0
  354. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/search/content_store.py +0 -0
  355. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/search/engine.py +0 -0
  356. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/search/exceptions.py +0 -0
  357. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/search/extractor.py +0 -0
  358. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/search/index_state.py +0 -0
  359. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/search/store.py +0 -0
  360. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/search/tokenizer.py +0 -0
  361. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/__init__.py +0 -0
  362. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/active.py +0 -0
  363. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/addendum.py +0 -0
  364. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/artifacts.py +0 -0
  365. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/authority.py +0 -0
  366. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/claude/__init__.py +0 -0
  367. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/claude/cleanup.py +0 -0
  368. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/claude/invoke.py +0 -0
  369. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/claude/paths.py +0 -0
  370. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/claude/relocate.py +0 -0
  371. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/cleanup.py +0 -0
  372. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/codex_handoff.py +0 -0
  373. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/codex_invoke.py +0 -0
  374. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/config.py +0 -0
  375. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/consumer_lanes.py +0 -0
  376. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/context_limit.py +0 -0
  377. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/context_rendering.py +0 -0
  378. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/effective.py +0 -0
  379. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/events.py +0 -0
  380. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/exceptions.py +0 -0
  381. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/git.py +0 -0
  382. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/hooks/__init__.py +0 -0
  383. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/hooks/models.py +0 -0
  384. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/hooks/session_start.py +0 -0
  385. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/identity.py +0 -0
  386. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/index.py +0 -0
  387. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/launch.py +0 -0
  388. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/launch_confirmation.py +0 -0
  389. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/launchability.py +0 -0
  390. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/manager.py +0 -0
  391. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/memory_inheritance.py +0 -0
  392. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/memory_writer.py +0 -0
  393. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/model_pin.py +0 -0
  394. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/models.py +0 -0
  395. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/overrides.py +0 -0
  396. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/passport.py +0 -0
  397. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/plan_resolution.py +0 -0
  398. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/prev_sessions.py +0 -0
  399. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/project_memory.py +0 -0
  400. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/rewind.py +0 -0
  401. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/routing.py +0 -0
  402. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/shadow_curation.py +0 -0
  403. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/store.py +0 -0
  404. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/transfer.py +0 -0
  405. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/validation.py +0 -0
  406. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/verification_config.py +0 -0
  407. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/workspace.py +0 -0
  408. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/worktree/__init__.py +0 -0
  409. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/worktree/cleanup.py +0 -0
  410. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/worktree/config_copy.py +0 -0
  411. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/session/worktree/create.py +0 -0
  412. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/sidecar/__init__.py +0 -0
  413. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/sidecar/container.py +0 -0
  414. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/forge/sidecar/docker.py +0 -0
  415. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/analyze/content.md +0 -0
  416. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/analyze/forge-skill.yaml +0 -0
  417. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/challenge/content.md +0 -0
  418. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/challenge/forge-skill.yaml +0 -0
  419. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/consensus/content.md +0 -0
  420. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/consensus/forge-skill.yaml +0 -0
  421. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/consensus/resources/synthesis.md +0 -0
  422. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/debate/content.md +0 -0
  423. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/debate/forge-skill.yaml +0 -0
  424. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/panel/content.md +0 -0
  425. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/panel/forge-skill.yaml +0 -0
  426. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/panel/resources/synthesis.md +0 -0
  427. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/SKILL.md +0 -0
  428. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/0-enable.md +0 -0
  429. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/1-preflight.md +0 -0
  430. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/10-resume.md +0 -0
  431. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/11-config.md +0 -0
  432. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/12-search.md +0 -0
  433. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/13-policy.md +0 -0
  434. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/14-workflow.md +0 -0
  435. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/15-skills.md +0 -0
  436. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/16-memory.md +0 -0
  437. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/17-info.md +0 -0
  438. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/18-disable.md +0 -0
  439. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/19-uninstall.md +0 -0
  440. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/2-extension.md +0 -0
  441. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/20-cleanup.md +0 -0
  442. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/3-authentication.md +0 -0
  443. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/5-session.md +0 -0
  444. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/6-hook.md +0 -0
  445. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/7-costs.md +0 -0
  446. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/8-status-line.md +0 -0
  447. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/checklist/9-direct-commands.md +0 -0
  448. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/coverage-map.md +0 -0
  449. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/report-template.md +0 -0
  450. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/resources/runtime-matrix.json +0 -0
  451. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/scripts/qa-artifact.py +0 -0
  452. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/scripts/qa-run-metrics.py +0 -0
  453. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/scripts/qa-selection.py +0 -0
  454. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/scripts/start-container.sh +0 -0
  455. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/qa/scripts/walkthrough-state.py +0 -0
  456. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review/content.md +0 -0
  457. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review/forge-skill.yaml +0 -0
  458. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review/references/claude-4.6.md +0 -0
  459. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review/references/claude-4.8.md +0 -0
  460. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review/references/gemini-3.1.md +0 -0
  461. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review/references/gpt-5.5.md +0 -0
  462. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review/references/skills-writing-guide.md +0 -0
  463. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review/resources/code-anthropic.md +0 -0
  464. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review/resources/code-gemini.md +0 -0
  465. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review/resources/code-openai.md +0 -0
  466. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review/resources/code.md +0 -0
  467. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review-docs/content.md +0 -0
  468. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review-docs/forge-skill.yaml +0 -0
  469. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review-docs/resources/docs-anthropic.md +0 -0
  470. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review-docs/resources/docs-gemini.md +0 -0
  471. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review-docs/resources/docs-openai.md +0 -0
  472. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/review-docs/resources/docs.md +0 -0
  473. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/smoke-test/content.md +0 -0
  474. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/smoke-test/forge-skill.yaml +0 -0
  475. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/smoke-test/scripts/smoke-test.sh +0 -0
  476. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/understand/content.md +0 -0
  477. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/understand/forge-skill.yaml +0 -0
  478. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/understand/resources/code-anthropic.md +0 -0
  479. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/understand/resources/code-gemini.md +0 -0
  480. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/understand/resources/code-openai.md +0 -0
  481. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/understand/resources/code.md +0 -0
  482. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/understand/resources/docs-anthropic.md +0 -0
  483. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/understand/resources/docs-gemini.md +0 -0
  484. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/understand/resources/docs-openai.md +0 -0
  485. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/understand/resources/docs.md +0 -0
  486. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/walkthrough/SKILL.md +0 -0
  487. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/walkthrough/resources/checklist.md +0 -0
  488. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/walkthrough/resources/journey-map.md +0 -0
  489. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/claude-wrapper.sh +0 -0
  490. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/cleanup-owned.sh +0 -0
  491. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/package-identity.py +0 -0
  492. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/protected-paths.py +0 -0
  493. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/run-in-repo.sh +0 -0
  494. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/setup-test-repo.sh +0 -0
  495. {multi_forge-1.0.0 → multi_forge-1.0.2}/src/skills/walkthrough/scripts/walkthrough-report.py +0 -0
  496. {multi_forge-1.0.0 → 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.0
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
@@ -33,7 +33,7 @@ Requires-Dist: expression<6,>=5.6.0
33
33
  Requires-Dist: fastapi-sso<1,>=0.19.0
34
34
  Requires-Dist: fastapi<0.137,>=0.136.3
35
35
  Requires-Dist: httpx>=0.25.0
36
- Requires-Dist: litellm<=1.99.0,>=1.98.0
36
+ Requires-Dist: litellm==1.102.0
37
37
  Requires-Dist: openai>=1.0.0
38
38
  Requires-Dist: orjson<4,>=3.11.6
39
39
  Requires-Dist: packaging>=21.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "multi-forge"
3
- version = "1.0.0"
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"
@@ -42,7 +42,7 @@ dependencies = [
42
42
  # Proxy dependencies (previously optional, now core). Forge owns the
43
43
  # default-Uvicorn LiteLLM startup set because the upstream `proxy` extra
44
44
  # caps cryptography below Forge's patched floor. This set is start/health
45
- # validated through LiteLLM 1.99.0; run scripts/test-wheel-runtime.sh before
45
+ # validated through LiteLLM 1.102.0; run scripts/test-wheel-runtime.sh before
46
46
  # raising the ceiling. Alternate servers, databases, and cloud integrations
47
47
  # remain outside Forge's runtime path.
48
48
  "aiohttp>=3.14.3,<4",
@@ -68,10 +68,8 @@ dependencies = [
68
68
  "uvloop>=0.21.0,<1; sys_platform != 'win32'",
69
69
  "watchfiles>=0.20",
70
70
  "websockets>=15.0.1,<16",
71
- # Floor = the first packaged-cost-map version for gemini-3.7-flash (see
72
- # tests/integration/proxy/test_proxy_local_litellm_e2e.py); packaged
73
- # cost-map pricing for that model first ships in the v1.98 line.
74
- "litellm>=1.98.0,<=1.99.0",
71
+ # Packaged Gemini 3.8 Flash metadata and the verified proxy runtime.
72
+ "litellm==1.102.0",
75
73
  ]
76
74
 
77
75
  [project.scripts]
@@ -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
@@ -0,0 +1,547 @@
1
+ # LiteLLM Local Proxy Configuration
2
+ # For use with personal API keys (Gemini, Anthropic, and/or OpenAI)
3
+ #
4
+ # Supported models:
5
+ # Gemini (requires GEMINI_API_KEY):
6
+ # - gemini/gemini-3.1-pro-preview
7
+ # - gemini/gemini-3.1-pro-preview-customtools (optimized for custom tools + bash)
8
+ # - gemini/gemini-3-flash-preview
9
+ # - gemini/gemini-3.8-flash (LiteLLM Flash default)
10
+ # - gemini/gemini-3.7-flash
11
+ # - gemini/gemini-3.6-flash (Gemini 3.6 Flash - efficiency release)
12
+ # - gemini/gemini-3.5-flash
13
+ # - gemini/gemini-2.5-flash
14
+ # - gemini/gemini-2.5-pro
15
+ #
16
+ # Anthropic (requires ANTHROPIC_API_KEY):
17
+ # - anthropic/claude-haiku-4-5, claude-sonnet-5-5, claude-sonnet-5, claude-opus-5-5, claude-opus-5
18
+ # - anthropic/claude-fable-5-1, claude-fable-5
19
+ # - anthropic/claude-opus-4-8, claude-opus-4-6, claude-sonnet-4-6
20
+ #
21
+ # OpenAI (requires OPENAI_API_KEY):
22
+ # - openai/gpt-5, gpt-5-codex, gpt-5-mini, gpt-5-nano, gpt-5-pro
23
+ # - openai/gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-max, gpt-5.1-codex-mini
24
+ # - openai/gpt-5.2, gpt-5.2-codex, gpt-5.2-pro
25
+ # - openai/gpt-5.3-codex
26
+ # - openai/gpt-5.4, gpt-5.4-pro
27
+ # - openai/gpt-5.5
28
+ # - openai/gpt-5.6, gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna
29
+ # - openai/gpt-6-astra, gpt-6.1-sol, gpt-6-sol, gpt-6-luna
30
+ #
31
+ # Start with: forge model backend start litellm --port 4000
32
+
33
+ model_list:
34
+ # Gemini 3.1 Pro Preview
35
+ - model_name: gemini/gemini-3.1-pro-preview
36
+ litellm_params:
37
+ model: gemini/gemini-3.1-pro-preview
38
+ api_key: os.environ/GEMINI_API_KEY
39
+
40
+ # Gemini 3.1 Pro Preview (Custom Tools) - optimized for agentic workflows with custom tools + bash
41
+ - model_name: gemini/gemini-3.1-pro-preview-customtools
42
+ litellm_params:
43
+ model: gemini/gemini-3.1-pro-preview-customtools
44
+ api_key: os.environ/GEMINI_API_KEY
45
+
46
+ # Gemini 3 Flash Preview
47
+ - model_name: gemini/gemini-3-flash-preview
48
+ litellm_params:
49
+ model: gemini/gemini-3-flash-preview
50
+ api_key: os.environ/GEMINI_API_KEY
51
+
52
+ # Gemini 3.8 Flash - current LiteLLM Flash default
53
+ - model_name: gemini/gemini-3.8-flash
54
+ litellm_params:
55
+ model: gemini/gemini-3.8-flash
56
+ api_key: os.environ/GEMINI_API_KEY
57
+
58
+ # Gemini 3.7 Flash
59
+ - model_name: gemini/gemini-3.7-flash
60
+ litellm_params:
61
+ model: gemini/gemini-3.7-flash
62
+ api_key: os.environ/GEMINI_API_KEY
63
+
64
+ # Gemini 3.6 Flash - efficiency release built on 3.5 Flash
65
+ - model_name: gemini/gemini-3.6-flash
66
+ litellm_params:
67
+ model: gemini/gemini-3.6-flash
68
+ api_key: os.environ/GEMINI_API_KEY
69
+
70
+ # Gemini 3.5 Flash
71
+ - model_name: gemini/gemini-3.5-flash
72
+ litellm_params:
73
+ model: gemini/gemini-3.5-flash
74
+ api_key: os.environ/GEMINI_API_KEY
75
+
76
+ # Gemini 2.5 Flash
77
+ - model_name: gemini/gemini-2.5-flash
78
+ litellm_params:
79
+ model: gemini/gemini-2.5-flash
80
+ api_key: os.environ/GEMINI_API_KEY
81
+
82
+ # Gemini 2.5 Pro
83
+ - model_name: gemini/gemini-2.5-pro
84
+ litellm_params:
85
+ model: gemini/gemini-2.5-pro
86
+ api_key: os.environ/GEMINI_API_KEY
87
+
88
+ # Aliases for convenience (match config.yaml model names)
89
+ - model_name: gemini-3.1-pro-preview
90
+ litellm_params:
91
+ model: gemini/gemini-3.1-pro-preview
92
+ api_key: os.environ/GEMINI_API_KEY
93
+
94
+ - model_name: gemini-3.1-pro-preview-customtools
95
+ litellm_params:
96
+ model: gemini/gemini-3.1-pro-preview-customtools
97
+ api_key: os.environ/GEMINI_API_KEY
98
+
99
+ - model_name: gemini-3-flash-preview
100
+ litellm_params:
101
+ model: gemini/gemini-3-flash-preview
102
+ api_key: os.environ/GEMINI_API_KEY
103
+
104
+ - model_name: gemini-3.8-flash
105
+ litellm_params:
106
+ model: gemini/gemini-3.8-flash
107
+ api_key: os.environ/GEMINI_API_KEY
108
+
109
+ - model_name: gemini-3.7-flash
110
+ litellm_params:
111
+ model: gemini/gemini-3.7-flash
112
+ api_key: os.environ/GEMINI_API_KEY
113
+
114
+ - model_name: gemini-3.6-flash
115
+ litellm_params:
116
+ model: gemini/gemini-3.6-flash
117
+ api_key: os.environ/GEMINI_API_KEY
118
+
119
+ - model_name: gemini-3.5-flash
120
+ litellm_params:
121
+ model: gemini/gemini-3.5-flash
122
+ api_key: os.environ/GEMINI_API_KEY
123
+
124
+ - model_name: gemini-2.5-flash
125
+ litellm_params:
126
+ model: gemini/gemini-2.5-flash
127
+ api_key: os.environ/GEMINI_API_KEY
128
+
129
+ - model_name: gemini-2.5-pro
130
+ litellm_params:
131
+ model: gemini/gemini-2.5-pro
132
+ api_key: os.environ/GEMINI_API_KEY
133
+
134
+ # =========================================================================
135
+ # Anthropic Models (requires ANTHROPIC_API_KEY)
136
+ # =========================================================================
137
+
138
+ - model_name: anthropic/claude-haiku-4-5
139
+ litellm_params:
140
+ model: anthropic/claude-haiku-4-5
141
+ api_key: os.environ/ANTHROPIC_API_KEY
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
+
181
+ - model_name: anthropic/claude-sonnet-5
182
+ litellm_params:
183
+ model: anthropic/claude-sonnet-5
184
+ api_key: os.environ/ANTHROPIC_API_KEY
185
+
186
+ # LiteLLM 1.102 predates Opus 5.5. Keep its pricing and thinking contract available offline.
187
+ # https://platform.claude.com/docs/en/models/opus-5-5/overview (verified 2026-09-23)
188
+ - model_name: anthropic/claude-opus-5-5
189
+ litellm_params:
190
+ model: anthropic/claude-opus-5-5
191
+ api_key: os.environ/ANTHROPIC_API_KEY
192
+ model_info:
193
+ base_model: claude-opus-5-5
194
+ mode: chat
195
+ max_input_tokens: 1000000
196
+ max_output_tokens: 128000
197
+ max_tokens: 128000
198
+ input_cost_per_token: 0.000004
199
+ output_cost_per_token: 0.000020
200
+ cache_creation_input_token_cost: 0.000005
201
+ cache_creation_input_token_cost_above_1hr: 0.000008
202
+ # Opus 5.5 cache reads intentionally cost $0.20/MTok (0.05x base input).
203
+ cache_read_input_token_cost: 0.0000002
204
+ supports_vision: true
205
+ supports_function_calling: true
206
+ supports_tool_choice: true
207
+ supports_prompt_caching: true
208
+ prompt_cache_min_tokens: 512
209
+ supports_reasoning: true
210
+ supports_adaptive_thinking: true
211
+ supports_legacy_thinking: false
212
+ thinking_always_on: true
213
+ supports_output_config: true
214
+ supports_xhigh_reasoning_effort: true
215
+ supports_max_reasoning_effort: true
216
+ default_reasoning_effort: medium
217
+ reasoning_effort_levels: [low, medium, high, xhigh, max]
218
+ supports_response_schema: true
219
+ supports_native_structured_output: true
220
+ supports_assistant_prefill: false
221
+ provider_specific_entry:
222
+ us: 1.1
223
+ fast: 2.0
224
+
225
+ - model_name: anthropic/claude-opus-5
226
+ litellm_params:
227
+ model: anthropic/claude-opus-5
228
+ api_key: os.environ/ANTHROPIC_API_KEY
229
+
230
+ - model_name: anthropic/claude-fable-5-1
231
+ litellm_params:
232
+ model: anthropic/claude-fable-5-1
233
+ api_key: os.environ/ANTHROPIC_API_KEY
234
+
235
+ - model_name: anthropic/claude-fable-5
236
+ litellm_params:
237
+ model: anthropic/claude-fable-5
238
+ api_key: os.environ/ANTHROPIC_API_KEY
239
+
240
+ - model_name: anthropic/claude-opus-4-8
241
+ litellm_params:
242
+ model: anthropic/claude-opus-4-8
243
+ api_key: os.environ/ANTHROPIC_API_KEY
244
+
245
+ - model_name: anthropic/claude-opus-4-6
246
+ litellm_params:
247
+ model: anthropic/claude-opus-4-6
248
+ api_key: os.environ/ANTHROPIC_API_KEY
249
+
250
+ - model_name: anthropic/claude-sonnet-4-6
251
+ litellm_params:
252
+ model: anthropic/claude-sonnet-4-6
253
+ api_key: os.environ/ANTHROPIC_API_KEY
254
+
255
+ # =========================================================================
256
+ # OpenAI Models (requires OPENAI_API_KEY)
257
+ # =========================================================================
258
+
259
+ # --- GPT-5 family ---
260
+ - model_name: openai/gpt-5
261
+ litellm_params:
262
+ model: openai/gpt-5
263
+ api_key: os.environ/OPENAI_API_KEY
264
+
265
+ - model_name: openai/gpt-5-codex
266
+ litellm_params:
267
+ model: openai/gpt-5-codex
268
+ api_key: os.environ/OPENAI_API_KEY
269
+
270
+ - model_name: openai/gpt-5-mini
271
+ litellm_params:
272
+ model: openai/gpt-5-mini
273
+ api_key: os.environ/OPENAI_API_KEY
274
+
275
+ - model_name: openai/gpt-5-nano
276
+ litellm_params:
277
+ model: openai/gpt-5-nano
278
+ api_key: os.environ/OPENAI_API_KEY
279
+
280
+ - model_name: openai/gpt-5-pro
281
+ litellm_params:
282
+ model: openai/gpt-5-pro
283
+ api_key: os.environ/OPENAI_API_KEY
284
+
285
+ # --- GPT-5.1 family ---
286
+ - model_name: openai/gpt-5.1
287
+ litellm_params:
288
+ model: openai/gpt-5.1
289
+ api_key: os.environ/OPENAI_API_KEY
290
+
291
+ - model_name: openai/gpt-5.1-codex
292
+ litellm_params:
293
+ model: openai/gpt-5.1-codex
294
+ api_key: os.environ/OPENAI_API_KEY
295
+
296
+ - model_name: openai/gpt-5.1-codex-max
297
+ litellm_params:
298
+ model: openai/gpt-5.1-codex-max
299
+ api_key: os.environ/OPENAI_API_KEY
300
+
301
+ - model_name: openai/gpt-5.1-codex-mini
302
+ litellm_params:
303
+ model: openai/gpt-5.1-codex-mini
304
+ api_key: os.environ/OPENAI_API_KEY
305
+
306
+ # --- GPT-5.2 family ---
307
+ - model_name: openai/gpt-5.2
308
+ litellm_params:
309
+ model: openai/gpt-5.2
310
+ api_key: os.environ/OPENAI_API_KEY
311
+
312
+ - model_name: openai/gpt-5.2-codex
313
+ litellm_params:
314
+ model: openai/gpt-5.2-codex
315
+ api_key: os.environ/OPENAI_API_KEY
316
+
317
+ - model_name: openai/gpt-5.2-pro
318
+ litellm_params:
319
+ model: openai/gpt-5.2-pro
320
+ api_key: os.environ/OPENAI_API_KEY
321
+
322
+ # --- GPT-5.3 family ---
323
+ - model_name: openai/gpt-5.3-codex
324
+ litellm_params:
325
+ model: openai/gpt-5.3-codex
326
+ api_key: os.environ/OPENAI_API_KEY
327
+
328
+ # --- GPT-5.4 family ---
329
+ - model_name: openai/gpt-5.4
330
+ litellm_params:
331
+ model: openai/gpt-5.4
332
+ api_key: os.environ/OPENAI_API_KEY
333
+
334
+ - model_name: openai/gpt-5.4-pro
335
+ litellm_params:
336
+ model: openai/gpt-5.4-pro
337
+ api_key: os.environ/OPENAI_API_KEY
338
+
339
+ - model_name: openai/gpt-5.4-mini
340
+ litellm_params:
341
+ model: openai/gpt-5.4-mini
342
+ api_key: os.environ/OPENAI_API_KEY
343
+
344
+ - model_name: openai/gpt-5.4-nano
345
+ litellm_params:
346
+ model: openai/gpt-5.4-nano
347
+ api_key: os.environ/OPENAI_API_KEY
348
+
349
+ # --- GPT-5.5 ---
350
+ - model_name: openai/gpt-5.5
351
+ litellm_params:
352
+ model: openai/gpt-5.5
353
+ api_key: os.environ/OPENAI_API_KEY
354
+
355
+ # --- GPT-5.6 family ---
356
+ - model_name: openai/gpt-5.6
357
+ litellm_params:
358
+ model: openai/gpt-5.6
359
+ api_key: os.environ/OPENAI_API_KEY
360
+
361
+ - model_name: openai/gpt-5.6-sol
362
+ litellm_params:
363
+ model: openai/gpt-5.6-sol
364
+ api_key: os.environ/OPENAI_API_KEY
365
+
366
+ - model_name: openai/gpt-5.6-terra
367
+ litellm_params:
368
+ model: openai/gpt-5.6-terra
369
+ api_key: os.environ/OPENAI_API_KEY
370
+
371
+ - model_name: openai/gpt-5.6-luna
372
+ litellm_params:
373
+ model: openai/gpt-5.6-luna
374
+ api_key: os.environ/OPENAI_API_KEY
375
+
376
+ - model_name: openai/gpt-6-astra
377
+ litellm_params:
378
+ model: openai/gpt-6-astra
379
+ api_key: os.environ/OPENAI_API_KEY
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
+
431
+ # LiteLLM 1.102 predates Sol and Luna. Standard, Flex and Fast rates include the >272k-token premium.
432
+ # Flex costs half of standard; Fast (also called priority) costs twice the applicable rate.
433
+ # Remove these overrides when bundled metadata covers them; test_litellm_model_metadata pins that boundary.
434
+ # https://developers.openai.com/api/docs/models/gpt-6-sol (verified 2026-09-23)
435
+ - model_name: openai/gpt-6-sol
436
+ litellm_params:
437
+ model: openai/gpt-6-sol
438
+ api_key: os.environ/OPENAI_API_KEY
439
+ use_responses_api: true
440
+ model_info:
441
+ base_model: gpt-6-sol
442
+ mode: responses
443
+ max_input_tokens: 922000
444
+ max_output_tokens: 128000
445
+ max_tokens: 128000
446
+ input_cost_per_token: 0.000002
447
+ output_cost_per_token: 0.000010
448
+ cache_read_input_token_cost: 0.0000002
449
+ cache_creation_input_token_cost: 0.0000025
450
+ input_cost_per_token_above_272k_tokens: 0.000004
451
+ output_cost_per_token_above_272k_tokens: 0.000015
452
+ cache_read_input_token_cost_above_272k_tokens: 0.0000004
453
+ cache_creation_input_token_cost_above_272k_tokens: 0.000005
454
+ input_cost_per_token_flex: 0.000001
455
+ output_cost_per_token_flex: 0.000005
456
+ cache_read_input_token_cost_flex: 0.0000001
457
+ cache_creation_input_token_cost_flex: 0.00000125
458
+ input_cost_per_token_above_272k_tokens_flex: 0.000002
459
+ output_cost_per_token_above_272k_tokens_flex: 0.0000075
460
+ cache_read_input_token_cost_above_272k_tokens_flex: 0.0000002
461
+ cache_creation_input_token_cost_above_272k_tokens_flex: 0.0000025
462
+ input_cost_per_token_priority: 0.000004
463
+ output_cost_per_token_priority: 0.000020
464
+ cache_read_input_token_cost_priority: 0.0000004
465
+ cache_creation_input_token_cost_priority: 0.000005
466
+ input_cost_per_token_above_272k_tokens_priority: 0.000008
467
+ output_cost_per_token_above_272k_tokens_priority: 0.000030
468
+ cache_read_input_token_cost_above_272k_tokens_priority: 0.0000008
469
+ cache_creation_input_token_cost_above_272k_tokens_priority: 0.000010
470
+ supports_vision: true
471
+ supports_function_calling: true
472
+ supports_parallel_function_calling: true
473
+ supports_tool_choice: true
474
+ supports_prompt_caching: true
475
+ supports_reasoning: true
476
+ supports_none_reasoning_effort: true
477
+ supports_xhigh_reasoning_effort: true
478
+ supports_max_reasoning_effort: true
479
+ default_reasoning_effort: medium
480
+ reasoning_effort_levels: [none, low, medium, high, xhigh, max]
481
+ supports_response_schema: true
482
+
483
+ # https://developers.openai.com/api/docs/models/gpt-6-luna (verified 2026-09-23)
484
+ - model_name: openai/gpt-6-luna
485
+ litellm_params:
486
+ model: openai/gpt-6-luna
487
+ api_key: os.environ/OPENAI_API_KEY
488
+ use_responses_api: true
489
+ model_info:
490
+ base_model: gpt-6-luna
491
+ mode: responses
492
+ max_input_tokens: 922000
493
+ max_output_tokens: 128000
494
+ max_tokens: 128000
495
+ input_cost_per_token: 0.0000001
496
+ output_cost_per_token: 0.0000005
497
+ cache_read_input_token_cost: 0.00000001
498
+ cache_creation_input_token_cost: 0.000000125
499
+ input_cost_per_token_above_272k_tokens: 0.0000002
500
+ output_cost_per_token_above_272k_tokens: 0.00000075
501
+ cache_read_input_token_cost_above_272k_tokens: 0.00000002
502
+ cache_creation_input_token_cost_above_272k_tokens: 0.00000025
503
+ input_cost_per_token_flex: 0.00000005
504
+ output_cost_per_token_flex: 0.00000025
505
+ cache_read_input_token_cost_flex: 0.000000005
506
+ cache_creation_input_token_cost_flex: 0.0000000625
507
+ input_cost_per_token_above_272k_tokens_flex: 0.0000001
508
+ output_cost_per_token_above_272k_tokens_flex: 0.000000375
509
+ cache_read_input_token_cost_above_272k_tokens_flex: 0.00000001
510
+ cache_creation_input_token_cost_above_272k_tokens_flex: 0.000000125
511
+ input_cost_per_token_priority: 0.0000002
512
+ output_cost_per_token_priority: 0.000001
513
+ cache_read_input_token_cost_priority: 0.00000002
514
+ cache_creation_input_token_cost_priority: 0.00000025
515
+ input_cost_per_token_above_272k_tokens_priority: 0.0000004
516
+ output_cost_per_token_above_272k_tokens_priority: 0.0000015
517
+ cache_read_input_token_cost_above_272k_tokens_priority: 0.00000004
518
+ cache_creation_input_token_cost_above_272k_tokens_priority: 0.0000005
519
+ supports_vision: true
520
+ supports_function_calling: true
521
+ supports_parallel_function_calling: true
522
+ supports_tool_choice: true
523
+ supports_prompt_caching: true
524
+ supports_reasoning: true
525
+ supports_none_reasoning_effort: true
526
+ supports_xhigh_reasoning_effort: true
527
+ supports_max_reasoning_effort: true
528
+ default_reasoning_effort: medium
529
+ reasoning_effort_levels: [none, low, medium, high, xhigh, max]
530
+ supports_response_schema: true
531
+
532
+ litellm_settings:
533
+ # Drop unmapped params instead of erroring
534
+ drop_params: true
535
+
536
+ set_verbose: false
537
+
538
+ request_timeout: 600
539
+
540
+ # General settings (optional)
541
+ # general_settings:
542
+ # # Master key for API authentication (optional)
543
+ # # Set via: export LITELLM_MASTER_KEY="sk-your-key"
544
+ # master_key: os.environ/LITELLM_MASTER_KEY
545
+ #
546
+ # # Database for tracking (optional)
547
+ # # database_url: "postgresql://..."
@@ -27,5 +27,5 @@ proxy:
27
27
  litellm:
28
28
  tiers:
29
29
  haiku: claude-haiku-4-5
30
- sonnet: claude-sonnet-5
31
- opus: claude-opus-5
30
+ sonnet: claude-sonnet-5-5
31
+ opus: claude-opus-5-5
@@ -27,7 +27,15 @@ proxy:
27
27
  sonnet: openai/gpt-6-astra
28
28
  opus: openai/gpt-6-astra
29
29
  model_alternatives:
30
+ haiku:
31
+ gpt-6-luna: openai/gpt-6-luna
30
32
  sonnet:
33
+ gpt-6.1-sol: openai/gpt-6.1-sol
34
+ gpt-6-sol: openai/gpt-6-sol
35
+ gpt-6-luna: openai/gpt-6-luna
31
36
  gpt-5.6-sol: openai/gpt-5.6-sol
32
37
  opus:
38
+ gpt-6.1-sol: openai/gpt-6.1-sol
39
+ gpt-6-sol: openai/gpt-6-sol
40
+ gpt-6-luna: openai/gpt-6-luna
33
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. Alternatives are
10
- # claude-fable-5-1, claude-fable-5, claude-opus-4-8, claude-opus-4-6,
11
- # and claude-sonnet-4-6.
9
+ # Defaults: sonnet tier -> Sonnet 5.5, opus tier -> Opus 5.5. Alternatives are
10
+ # claude-opus-5, claude-fable-5-1, claude-fable-5, claude-opus-4-8, claude-opus-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,15 +22,17 @@ proxy:
22
22
  litellm:
23
23
  tiers:
24
24
  haiku: anthropic/claude-haiku-4-5
25
- sonnet: anthropic/claude-sonnet-5
26
- opus: anthropic/claude-opus-5
25
+ sonnet: anthropic/claude-sonnet-5-5
26
+ opus: anthropic/claude-opus-5-5
27
27
  model_alternatives:
28
28
  opus:
29
+ claude-opus-5: anthropic/claude-opus-5
29
30
  claude-fable-5-1: anthropic/claude-fable-5-1
30
31
  claude-fable-5: anthropic/claude-fable-5
31
32
  claude-opus-4-8: anthropic/claude-opus-4-8
32
33
  claude-opus-4-6: anthropic/claude-opus-4-6
33
34
  sonnet:
35
+ claude-sonnet-5: anthropic/claude-sonnet-5
34
36
  claude-sonnet-4-6: anthropic/claude-sonnet-4-6
35
37
  prompt_caching: passthrough
36
38
  error_hints: true