multi-forge 1.1.4__tar.gz → 1.1.5__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 (541) hide show
  1. {multi_forge-1.1.4 → multi_forge-1.1.5}/PKG-INFO +2 -2
  2. {multi_forge-1.1.4 → multi_forge-1.1.5}/pyproject.toml +3 -3
  3. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/backends/litellm.yaml +42 -1
  4. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-anthropic-local.yaml +2 -1
  5. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-anthropic.yaml +3 -2
  6. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-anthropic.yaml +4 -2
  7. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/model_catalog.yaml +40 -7
  8. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/model_routes.yaml +5 -0
  9. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/correlation.py +9 -7
  10. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/model_routes.py +2 -0
  11. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/proxies.py +17 -10
  12. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/4-proxy.md +2 -2
  13. {multi_forge-1.1.4 → multi_forge-1.1.5}/.gitignore +0 -0
  14. {multi_forge-1.1.4 → multi_forge-1.1.5}/LICENSE +0 -0
  15. {multi_forge-1.1.4 → multi_forge-1.1.5}/NOTICE +0 -0
  16. {multi_forge-1.1.4 → multi_forge-1.1.5}/README.md +0 -0
  17. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/agents/.gitkeep +0 -0
  18. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/commands/.gitkeep +0 -0
  19. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/__init__.py +0 -0
  20. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/__init__.py +0 -0
  21. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/adapters/__init__.py +0 -0
  22. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/adapters/litellm.py +0 -0
  23. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/creation.py +0 -0
  24. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/registry.py +0 -0
  25. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/remote/__init__.py +0 -0
  26. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/remote/base.py +0 -0
  27. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/remote/openrouter.py +0 -0
  28. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/sources.py +0 -0
  29. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/__init__.py +0 -0
  30. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/activity.py +0 -0
  31. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/auth.py +0 -0
  32. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/backend.py +0 -0
  33. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/claude.py +0 -0
  34. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/codex.py +0 -0
  35. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/config_cmd.py +0 -0
  36. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/consumer_lane_freeze.py +0 -0
  37. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/editor.py +0 -0
  38. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/extensions.py +0 -0
  39. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/gc.py +0 -0
  40. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/guards.py +0 -0
  41. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/__init__.py +0 -0
  42. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/_group.py +0 -0
  43. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/_helpers.py +0 -0
  44. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/authority.py +0 -0
  45. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/codex_patch.py +0 -0
  46. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/codex_policy.py +0 -0
  47. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/codex_policy_feedback.py +0 -0
  48. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/codex_stop.py +0 -0
  49. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/codex_transfer.py +0 -0
  50. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/commands.py +0 -0
  51. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/direct_commands.py +0 -0
  52. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/policy.py +0 -0
  53. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/protocols.py +0 -0
  54. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/read_hygiene.py +0 -0
  55. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/verification.py +0 -0
  56. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/info.py +0 -0
  57. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/logs.py +0 -0
  58. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/main.py +0 -0
  59. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/memory.py +0 -0
  60. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/memory_report.py +0 -0
  61. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/memory_writer.py +0 -0
  62. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/model.py +0 -0
  63. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/output.py +0 -0
  64. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/policy.py +0 -0
  65. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/proxy.py +0 -0
  66. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/proxy_audit.py +0 -0
  67. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/proxy_costs.py +0 -0
  68. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/runtime.py +0 -0
  69. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/search.py +0 -0
  70. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session.py +0 -0
  71. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_adopt.py +0 -0
  72. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_authority.py +0 -0
  73. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_authority_options.py +0 -0
  74. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_codex.py +0 -0
  75. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_delete.py +0 -0
  76. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_derived_preflight.py +0 -0
  77. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_effort_hint.py +0 -0
  78. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_fork.py +0 -0
  79. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_lane.py +0 -0
  80. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_launch_args.py +0 -0
  81. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_lifecycle.py +0 -0
  82. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_manage.py +0 -0
  83. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_memory.py +0 -0
  84. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_model.py +0 -0
  85. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_repair.py +0 -0
  86. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_resume_modes.py +0 -0
  87. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_rewind.py +0 -0
  88. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_route_recovery.py +0 -0
  89. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_routing.py +0 -0
  90. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_supervisor_options.py +0 -0
  91. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/status_line.py +0 -0
  92. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/__init__.py +0 -0
  93. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/context.py +0 -0
  94. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/effort.py +0 -0
  95. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/formatting.py +0 -0
  96. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/names.py +0 -0
  97. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/palette.py +0 -0
  98. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/registry.py +0 -0
  99. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/rendering.py +0 -0
  100. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/routing.py +0 -0
  101. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/sources.py +0 -0
  102. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/throttle.py +0 -0
  103. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/types.py +0 -0
  104. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/supervisor_auth.py +0 -0
  105. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/telemetry.py +0 -0
  106. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/trace.py +0 -0
  107. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/transfer.py +0 -0
  108. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/workflow.py +0 -0
  109. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/workspace.py +0 -0
  110. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/__init__.py +0 -0
  111. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/dataclass_utils.py +0 -0
  112. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/__init__.py +0 -0
  113. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/backends/__init__.py +0 -0
  114. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/__init__.py +0 -0
  115. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/anthropic-passthrough.yaml +0 -0
  116. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/codex-responses-local.yaml +0 -0
  117. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-gemini-flash-local.yaml +0 -0
  118. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-gemini-local.yaml +0 -0
  119. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-gemini-test.yaml +0 -0
  120. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-gemini.yaml +0 -0
  121. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-openai-codex-local.yaml +0 -0
  122. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-openai-local.yaml +0 -0
  123. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-openai.yaml +0 -0
  124. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-deepseek.yaml +0 -0
  125. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-gemini-flash.yaml +0 -0
  126. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-gemini.yaml +0 -0
  127. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-glm.yaml +0 -0
  128. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-kimi.yaml +0 -0
  129. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-minimax.yaml +0 -0
  130. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-openai-codex.yaml +0 -0
  131. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-openai.yaml +0 -0
  132. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-qwen.yaml +0 -0
  133. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/loader.py +0 -0
  134. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/schema.py +0 -0
  135. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/__init__.py +0 -0
  136. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/auth/__init__.py +0 -0
  137. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/auth/capabilities.py +0 -0
  138. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/auth/credentials_file.py +0 -0
  139. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/auth/protocols.py +0 -0
  140. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/auth/secrets.py +0 -0
  141. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/auth/template_secrets.py +0 -0
  142. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/backend_dependency.py +0 -0
  143. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/credential_registry.py +0 -0
  144. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/__init__.py +0 -0
  145. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/model_practices.yaml +0 -0
  146. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/system_prompt_addendums/__init__.py +0 -0
  147. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/system_prompt_addendums/gemini.md +0 -0
  148. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/system_prompt_addendums/openai.md +0 -0
  149. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/effort.py +0 -0
  150. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/effort_observation.py +0 -0
  151. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/identifiers.py +0 -0
  152. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/__init__.py +0 -0
  153. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/_lifecycle.py +0 -0
  154. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/claude.py +0 -0
  155. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/codex.py +0 -0
  156. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/codex_fork.py +0 -0
  157. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/codex_stream.py +0 -0
  158. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/types.py +0 -0
  159. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/judgments/__init__.py +0 -0
  160. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/judgments/openrouter.py +0 -0
  161. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/judgments/types.py +0 -0
  162. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/judgments/usage.py +0 -0
  163. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/lanes.py +0 -0
  164. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/__init__.py +0 -0
  165. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/clients/__init__.py +0 -0
  166. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/clients/base.py +0 -0
  167. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/clients/effort.py +0 -0
  168. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/clients/litellm.py +0 -0
  169. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/clients/openai_compat.py +0 -0
  170. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/clients/openrouter.py +0 -0
  171. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/credentials.py +0 -0
  172. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/detection.py +0 -0
  173. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/errors.py +0 -0
  174. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/openrouter_policy.py +0 -0
  175. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/protocols.py +0 -0
  176. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/types.py +0 -0
  177. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/logging.py +0 -0
  178. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/metric_formatting.py +0 -0
  179. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/__init__.py +0 -0
  180. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/catalog.py +0 -0
  181. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/direct_model.py +0 -0
  182. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/model_practices.py +0 -0
  183. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/model_reference.py +0 -0
  184. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/model_routes.py +0 -0
  185. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/types.py +0 -0
  186. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/naming.py +0 -0
  187. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/native_review_types.py +0 -0
  188. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/__init__.py +0 -0
  189. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/backend_reconcile.py +0 -0
  190. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/claude_session.py +0 -0
  191. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/codex_adopt.py +0 -0
  192. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/codex_bridge.py +0 -0
  193. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/codex_enrollment.py +0 -0
  194. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/codex_interactive.py +0 -0
  195. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/codex_session.py +0 -0
  196. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/codex_thread_index.py +0 -0
  197. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/context.py +0 -0
  198. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/gc.py +0 -0
  199. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/policy.py +0 -0
  200. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/provider_trace.py +0 -0
  201. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/proxy.py +0 -0
  202. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/resolution.py +0 -0
  203. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session.py +0 -0
  204. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_active.py +0 -0
  205. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_adopt.py +0 -0
  206. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_authority.py +0 -0
  207. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_authority_launch.py +0 -0
  208. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_context.py +0 -0
  209. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_fork_execution.py +0 -0
  210. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_fork_preflight.py +0 -0
  211. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_model.py +0 -0
  212. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_model_routing.py +0 -0
  213. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_repair.py +0 -0
  214. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_routing.py +0 -0
  215. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/transfer.py +0 -0
  216. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/usage_summary.py +0 -0
  217. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/workspace.py +0 -0
  218. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/paths.py +0 -0
  219. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/process.py +0 -0
  220. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/provider_types.py +0 -0
  221. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/__init__.py +0 -0
  222. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/codex_reviewer_home.py +0 -0
  223. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/cost_tracking.py +0 -0
  224. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/env.py +0 -0
  225. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/headless_json.py +0 -0
  226. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/llm_call.py +0 -0
  227. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/proxy.py +0 -0
  228. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/reviewer_runtime.py +0 -0
  229. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/reviewer_settings.py +0 -0
  230. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/routing.py +0 -0
  231. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/session_runner.py +0 -0
  232. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/structured_output.py +0 -0
  233. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/supervisor_auth.py +0 -0
  234. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/tagger.py +0 -0
  235. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/throttle.py +0 -0
  236. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/watchdog.py +0 -0
  237. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/run_id.py +0 -0
  238. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/__init__.py +0 -0
  239. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/codex_feedback.py +0 -0
  240. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/codex_preflight.py +0 -0
  241. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/codex_preflight_cache.py +0 -0
  242. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/codex_review_source.py +0 -0
  243. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/codex_rollouts.py +0 -0
  244. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/codex_turn_enrollment.py +0 -0
  245. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/launch_args.py +0 -0
  246. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/registry.py +0 -0
  247. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime_vocab.py +0 -0
  248. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/__init__.py +0 -0
  249. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/exceptions.py +0 -0
  250. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/io.py +0 -0
  251. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/lock.py +0 -0
  252. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/retention.py +0 -0
  253. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/timestamps.py +0 -0
  254. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/versioned_store.py +0 -0
  255. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/__init__.py +0 -0
  256. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/caps.py +0 -0
  257. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/downstream.py +0 -0
  258. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/downstream_retention.py +0 -0
  259. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/jsonl_io.py +0 -0
  260. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/upstream.py +0 -0
  261. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/vocabulary.py +0 -0
  262. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/tiers.py +0 -0
  263. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/transcript.py +0 -0
  264. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/typing_helpers.py +0 -0
  265. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/__init__.py +0 -0
  266. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/billing.py +0 -0
  267. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/emit.py +0 -0
  268. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/ledger.py +0 -0
  269. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/measurement.py +0 -0
  270. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/vocabulary.py +0 -0
  271. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/wire_shapes.py +0 -0
  272. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/worker_controls.py +0 -0
  273. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/workqueue/__init__.py +0 -0
  274. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/workqueue/queue.py +0 -0
  275. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/workqueue/types.py +0 -0
  276. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/__init__.py +0 -0
  277. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/codex_hooks.py +0 -0
  278. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/doctor.py +0 -0
  279. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/exceptions.py +0 -0
  280. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/hook_dispatcher.py +0 -0
  281. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/hook_migration.py +0 -0
  282. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/hooks.py +0 -0
  283. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/installer.py +0 -0
  284. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/models.py +0 -0
  285. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/module_planning.py +0 -0
  286. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/ownership.py +0 -0
  287. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/path_policy.py +0 -0
  288. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/preset.py +0 -0
  289. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/project_compat.py +0 -0
  290. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/project_registry.py +0 -0
  291. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/runtime_removal.py +0 -0
  292. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/settings_merge.py +0 -0
  293. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/settings_rollback.py +0 -0
  294. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/skill_cache.py +0 -0
  295. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/skill_compiler.py +0 -0
  296. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/skill_planning.py +0 -0
  297. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/skill_validation.py +0 -0
  298. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/tracking.py +0 -0
  299. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/unmanaged.py +0 -0
  300. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/version.py +0 -0
  301. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/__init__.py +0 -0
  302. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/action_identity.py +0 -0
  303. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/deterministic/__init__.py +0 -0
  304. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/deterministic/base.py +0 -0
  305. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/deterministic/coding_standards.py +0 -0
  306. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/deterministic/registry.py +0 -0
  307. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/deterministic/tdd.py +0 -0
  308. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/diff.py +0 -0
  309. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/engine.py +0 -0
  310. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/protocols.py +0 -0
  311. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/queries.py +0 -0
  312. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/__init__.py +0 -0
  313. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/attempts.py +0 -0
  314. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/deadline.py +0 -0
  315. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/identity.py +0 -0
  316. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/native_codex.py +0 -0
  317. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/plan_check.py +0 -0
  318. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/plan_source.py +0 -0
  319. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/shadow.py +0 -0
  320. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/shadow_runner.py +0 -0
  321. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/stop_review.py +0 -0
  322. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/supervisor.py +0 -0
  323. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/turn_evidence.py +0 -0
  324. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/verdict.py +0 -0
  325. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/store.py +0 -0
  326. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/supervisor_lane_degrade.py +0 -0
  327. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/team/__init__.py +0 -0
  328. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/team/config.py +0 -0
  329. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/team/handlers.py +0 -0
  330. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/team/prompts.py +0 -0
  331. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/types.py +0 -0
  332. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/__init__.py +0 -0
  333. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/accounting_persistence.py +0 -0
  334. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/audit_logger.py +0 -0
  335. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/base_client.py +0 -0
  336. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/client_adapter.py +0 -0
  337. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/client_factory.py +0 -0
  338. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/converters.py +0 -0
  339. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/cost_logger.py +0 -0
  340. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/cost_tracker.py +0 -0
  341. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/data_models.py +0 -0
  342. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/effort_observation.py +0 -0
  343. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/error_hints.py +0 -0
  344. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/intercept.py +0 -0
  345. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/metrics.py +0 -0
  346. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/passthrough.py +0 -0
  347. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/passthrough_ingress.py +0 -0
  348. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/ports.py +0 -0
  349. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/provider_trace_logger.py +0 -0
  350. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/proxy_identity.py +0 -0
  351. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/proxy_orchestrator.py +0 -0
  352. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/proxy_startup.py +0 -0
  353. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/reasoning.py +0 -0
  354. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/request_id.py +0 -0
  355. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/response_headers.py +0 -0
  356. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/responses_ingress.py +0 -0
  357. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/responses_passthrough.py +0 -0
  358. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/runtime_truth.py +0 -0
  359. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/server.py +0 -0
  360. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/sse_framing.py +0 -0
  361. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/stream_relay.py +0 -0
  362. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/utils.py +0 -0
  363. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/__init__.py +0 -0
  364. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/adversarial.py +0 -0
  365. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/backend_readiness.py +0 -0
  366. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/consensus.py +0 -0
  367. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/engine.py +0 -0
  368. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/models.py +0 -0
  369. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/__init__.py +0 -0
  370. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/code_consensus_evaluation.md +0 -0
  371. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/code_debate_evaluation.md +0 -0
  372. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/codereview-performance.md +0 -0
  373. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/codereview-quick.md +0 -0
  374. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/codereview-security.md +0 -0
  375. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/codereview.md +0 -0
  376. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/consensus_evaluation.md +0 -0
  377. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/debate_evaluation.md +0 -0
  378. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/docreview-quick.md +0 -0
  379. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/docreview.md +0 -0
  380. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/thinkdeep.md +0 -0
  381. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/routing.py +0 -0
  382. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/synthesis.py +0 -0
  383. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/worker_preparation.py +0 -0
  384. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/runtime_config.py +0 -0
  385. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/__init__.py +0 -0
  386. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/bm25_store.py +0 -0
  387. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/cleanup.py +0 -0
  388. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/content_store.py +0 -0
  389. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/engine.py +0 -0
  390. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/exceptions.py +0 -0
  391. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/extractor.py +0 -0
  392. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/index_state.py +0 -0
  393. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/store.py +0 -0
  394. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/tokenizer.py +0 -0
  395. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/__init__.py +0 -0
  396. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/active.py +0 -0
  397. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/addendum.py +0 -0
  398. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/artifacts.py +0 -0
  399. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/authority.py +0 -0
  400. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/claude/__init__.py +0 -0
  401. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/claude/cleanup.py +0 -0
  402. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/claude/invoke.py +0 -0
  403. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/claude/paths.py +0 -0
  404. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/claude/relocate.py +0 -0
  405. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/cleanup.py +0 -0
  406. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/cleanup_content.py +0 -0
  407. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/cleanup_dependencies.py +0 -0
  408. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/cleanup_git.py +0 -0
  409. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/cleanup_state.py +0 -0
  410. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/codex_handoff.py +0 -0
  411. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/codex_invoke.py +0 -0
  412. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/config.py +0 -0
  413. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/consumer_lanes.py +0 -0
  414. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/context_limit.py +0 -0
  415. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/context_rendering.py +0 -0
  416. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/deletion.py +0 -0
  417. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/derived_overrides.py +0 -0
  418. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/effective.py +0 -0
  419. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/events.py +0 -0
  420. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/exceptions.py +0 -0
  421. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/git.py +0 -0
  422. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/hooks/__init__.py +0 -0
  423. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/hooks/models.py +0 -0
  424. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/hooks/producers.py +0 -0
  425. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/hooks/session_start.py +0 -0
  426. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/identity.py +0 -0
  427. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/index.py +0 -0
  428. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/launch.py +0 -0
  429. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/launch_confirmation.py +0 -0
  430. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/launchability.py +0 -0
  431. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/manager.py +0 -0
  432. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/memory_inheritance.py +0 -0
  433. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/memory_writer.py +0 -0
  434. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/model_pin.py +0 -0
  435. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/models.py +0 -0
  436. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/overrides.py +0 -0
  437. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/passport.py +0 -0
  438. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/plan_resolution.py +0 -0
  439. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/prev_sessions.py +0 -0
  440. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/project_memory.py +0 -0
  441. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/purge_native.py +0 -0
  442. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/rewind.py +0 -0
  443. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/routing.py +0 -0
  444. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/shadow_curation.py +0 -0
  445. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/store.py +0 -0
  446. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/transfer.py +0 -0
  447. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/validation.py +0 -0
  448. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/verification_config.py +0 -0
  449. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/workers.py +0 -0
  450. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/workspace.py +0 -0
  451. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/worktree/__init__.py +0 -0
  452. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/worktree/cleanup.py +0 -0
  453. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/worktree/config_copy.py +0 -0
  454. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/worktree/create.py +0 -0
  455. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/sidecar/__init__.py +0 -0
  456. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/sidecar/container.py +0 -0
  457. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/sidecar/docker.py +0 -0
  458. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/analyze/content.md +0 -0
  459. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/analyze/forge-skill.yaml +0 -0
  460. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/challenge/content.md +0 -0
  461. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/challenge/forge-skill.yaml +0 -0
  462. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/consensus/content.md +0 -0
  463. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/consensus/forge-skill.yaml +0 -0
  464. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/consensus/resources/synthesis.md +0 -0
  465. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/debate/content.md +0 -0
  466. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/debate/forge-skill.yaml +0 -0
  467. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/panel/content.md +0 -0
  468. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/panel/forge-skill.yaml +0 -0
  469. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/panel/resources/synthesis.md +0 -0
  470. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/SKILL.md +0 -0
  471. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/0-enable.md +0 -0
  472. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/1-preflight.md +0 -0
  473. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/10-resume.md +0 -0
  474. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/11-config.md +0 -0
  475. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/12-search.md +0 -0
  476. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/13-policy.md +0 -0
  477. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/14-workflow.md +0 -0
  478. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/15-skills.md +0 -0
  479. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/16-memory.md +0 -0
  480. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/17-info.md +0 -0
  481. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/18-disable.md +0 -0
  482. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/19-uninstall.md +0 -0
  483. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/2-extension.md +0 -0
  484. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/20-cleanup.md +0 -0
  485. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/3-authentication.md +0 -0
  486. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/5-session.md +0 -0
  487. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/6-hook.md +0 -0
  488. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/7-costs.md +0 -0
  489. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/8-status-line.md +0 -0
  490. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/9-direct-commands.md +0 -0
  491. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist.md +0 -0
  492. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/coverage-map.md +0 -0
  493. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/execution-budget.json +0 -0
  494. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/report-template.md +0 -0
  495. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/runtime-matrix.json +0 -0
  496. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/scripts/qa-artifact.py +0 -0
  497. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/scripts/qa-run-metrics.py +0 -0
  498. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/scripts/qa-selection.py +0 -0
  499. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/scripts/start-container.sh +0 -0
  500. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/scripts/walkthrough-state.py +0 -0
  501. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/content.md +0 -0
  502. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/forge-skill.yaml +0 -0
  503. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/references/claude-4.6.md +0 -0
  504. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/references/claude-4.8.md +0 -0
  505. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/references/gemini-3.1.md +0 -0
  506. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/references/gpt-5.5.md +0 -0
  507. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/references/skills-writing-guide.md +0 -0
  508. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/resources/code-anthropic.md +0 -0
  509. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/resources/code-gemini.md +0 -0
  510. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/resources/code-openai.md +0 -0
  511. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/resources/code.md +0 -0
  512. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review-docs/content.md +0 -0
  513. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review-docs/forge-skill.yaml +0 -0
  514. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review-docs/resources/docs-anthropic.md +0 -0
  515. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review-docs/resources/docs-gemini.md +0 -0
  516. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review-docs/resources/docs-openai.md +0 -0
  517. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review-docs/resources/docs.md +0 -0
  518. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/smoke-test/content.md +0 -0
  519. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/smoke-test/forge-skill.yaml +0 -0
  520. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/smoke-test/scripts/smoke-test.sh +0 -0
  521. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/content.md +0 -0
  522. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/forge-skill.yaml +0 -0
  523. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/code-anthropic.md +0 -0
  524. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/code-gemini.md +0 -0
  525. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/code-openai.md +0 -0
  526. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/code.md +0 -0
  527. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/docs-anthropic.md +0 -0
  528. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/docs-gemini.md +0 -0
  529. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/docs-openai.md +0 -0
  530. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/docs.md +0 -0
  531. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/SKILL.md +0 -0
  532. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/resources/checklist.md +0 -0
  533. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/resources/journey-map.md +0 -0
  534. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/claude-wrapper.sh +0 -0
  535. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/cleanup-owned.sh +0 -0
  536. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/package-identity.py +0 -0
  537. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/protected-paths.py +0 -0
  538. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/run-in-repo.sh +0 -0
  539. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/setup-test-repo.sh +0 -0
  540. {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/walkthrough-report.py +0 -0
  541. {multi_forge-1.1.4 → multi_forge-1.1.5}/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.1.4
3
+ Version: 1.1.5
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
@@ -38,7 +38,7 @@ Requires-Dist: filelock>=4.2.1
38
38
  Requires-Dist: httpx>=0.25.0
39
39
  Requires-Dist: litellm==1.102.2
40
40
  Requires-Dist: multidict<7,>=6.9.1
41
- Requires-Dist: oauthlib<5,>=4.0.0
41
+ Requires-Dist: oauthlib<5,>=4.0.1
42
42
  Requires-Dist: openai>=1.0.0
43
43
  Requires-Dist: orjson<4,>=3.11.6
44
44
  Requires-Dist: packaging>=21.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "multi-forge"
3
- version = "1.1.4"
3
+ version = "1.1.5"
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"
@@ -64,7 +64,7 @@ dependencies = [
64
64
  "filelock>=4.2.1",
65
65
  # Runtime security floors belong in wheel metadata, not only uv constraints.
66
66
  "multidict>=6.9.1,<7",
67
- "oauthlib>=4.0.0,<5",
67
+ "oauthlib>=4.0.1,<5",
68
68
  "orjson>=3.11.6,<4",
69
69
  "pydantic-settings>=2.14.1,<3",
70
70
  "pyjwt>=2.15.0,<3",
@@ -172,7 +172,7 @@ constraint-dependencies = [
172
172
  "virtualenv>=21.14.13",
173
173
  "mcp>=1.28.1",
174
174
  "Pygments>=2.20.0",
175
- "pyasn1>=0.6.4",
175
+ "pyasn1>=0.6.5",
176
176
  ]
177
177
 
178
178
  [dependency-groups]
@@ -16,7 +16,7 @@
16
16
  #
17
17
  # Anthropic (requires ANTHROPIC_API_KEY):
18
18
  # - anthropic/claude-haiku-4-5, claude-sonnet-5-5, claude-sonnet-5, claude-opus-5-5, claude-opus-5
19
- # - anthropic/claude-fable-5-1, claude-fable-5
19
+ # - anthropic/claude-fable-5-2, claude-fable-5-1, claude-fable-5
20
20
  # - anthropic/claude-opus-4-8, claude-opus-4-6, claude-sonnet-4-6
21
21
  #
22
22
  # OpenAI (requires OPENAI_API_KEY):
@@ -279,6 +279,47 @@ model_list:
279
279
  model: anthropic/claude-opus-5
280
280
  api_key: os.environ/ANTHROPIC_API_KEY
281
281
 
282
+ # LiteLLM 1.102.2 predates Fable 5.2; register its native controls and prices offline.
283
+ # https://platform.claude.com/docs/en/models/fable-5-2/overview (verified 2026-11-10)
284
+ - model_name: anthropic/claude-fable-5-2
285
+ litellm_params:
286
+ model: anthropic/claude-fable-5-2
287
+ api_key: os.environ/ANTHROPIC_API_KEY
288
+ model_info:
289
+ base_model: claude-fable-5-2
290
+ mode: chat
291
+ max_input_tokens: 1000000
292
+ max_output_tokens: 128000
293
+ max_tokens: 128000
294
+ input_cost_per_token: 0.000008
295
+ output_cost_per_token: 0.000040
296
+ cache_creation_input_token_cost: 0.000010
297
+ cache_creation_input_token_cost_above_1hr: 0.000016
298
+ cache_read_input_token_cost: 0.0000002
299
+ supports_vision: true
300
+ supports_function_calling: true
301
+ supports_tool_choice: true
302
+ supports_forced_tool_use: false
303
+ supports_sampling_params: false
304
+ supports_prompt_caching: true
305
+ prompt_cache_min_tokens: 512
306
+ supports_reasoning: true
307
+ supports_adaptive_thinking: true
308
+ supports_legacy_thinking: false
309
+ thinking_always_on: true
310
+ supports_output_config: true
311
+ supports_xhigh_reasoning_effort: true
312
+ supports_max_reasoning_effort: true
313
+ default_reasoning_effort: high
314
+ reasoning_effort_levels: [low, medium, high, xhigh, max]
315
+ supports_response_schema: true
316
+ supports_native_structured_output: true
317
+ supports_assistant_prefill: false
318
+ supports_mid_conversation_system: true
319
+ provider_specific_entry:
320
+ us: 1.1
321
+ fast: 2.0
322
+
282
323
  - model_name: anthropic/claude-fable-5-1
283
324
  litellm_params:
284
325
  model: anthropic/claude-fable-5-1
@@ -7,7 +7,7 @@
7
7
  # Backend (LiteLLM on port 4000) starts automatically.
8
8
  #
9
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,
10
+ # claude-opus-5, claude-fable-5-2, claude-fable-5-1, claude-fable-5, claude-opus-4-8, claude-opus-4-6,
11
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:
@@ -27,6 +27,7 @@ proxy:
27
27
  model_alternatives:
28
28
  opus:
29
29
  claude-opus-5: anthropic/claude-opus-5
30
+ claude-fable-5-2: anthropic/claude-fable-5-2
30
31
  claude-fable-5-1: anthropic/claude-fable-5-1
31
32
  claude-fable-5: anthropic/claude-fable-5
32
33
  claude-opus-4-8: anthropic/claude-opus-4-8
@@ -1,12 +1,12 @@
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.5/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.2/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
6
  # NOTE: the shared LiteLLM instance must serve anthropic/claude-opus-5-5 and anthropic/claude-sonnet-5-5.
7
7
  #
8
8
  # Defaults: sonnet tier -> Sonnet 5.5, opus tier -> Opus 5.5. Alternatives are
9
- # claude-opus-5, claude-fable-5-1, claude-fable-5, claude-opus-4-8, claude-opus-4-6,
9
+ # claude-opus-5, claude-fable-5-2, claude-fable-5-1, claude-fable-5, claude-opus-4-8, claude-opus-4-6,
10
10
  # claude-sonnet-5, and claude-sonnet-4-6.
11
11
  # prompt_caching: passthrough respects Anthropic's 4-breakpoint cache_control limit.
12
12
 
@@ -24,6 +24,7 @@ proxy:
24
24
  model_alternatives:
25
25
  opus:
26
26
  claude-opus-5: anthropic/claude-opus-5
27
+ claude-fable-5-2: anthropic/claude-fable-5-2
27
28
  claude-fable-5-1: anthropic/claude-fable-5-1
28
29
  claude-fable-5: anthropic/claude-fable-5
29
30
  claude-opus-4-8: anthropic/claude-opus-4-8
@@ -1,11 +1,11 @@
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.5/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.2/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
7
  # Defaults: sonnet tier -> Sonnet 5.5, opus tier -> Opus 5.5. Alternatives are
8
- # claude-opus-5, claude-fable-5-1, claude-fable-5, claude-opus-4-8, claude-opus-4-6,
8
+ # claude-opus-5, claude-fable-5-2, claude-fable-5-1, claude-fable-5, claude-opus-4-8, claude-opus-4-6,
9
9
  # claude-sonnet-5, and claude-sonnet-4-6.
10
10
 
11
11
  proxy:
@@ -21,11 +21,13 @@ proxy:
21
21
  sonnet: anthropic/claude-sonnet-5.5
22
22
  opus: anthropic/claude-opus-5.5
23
23
  zdr_fallbacks:
24
+ anthropic/claude-fable-5.2: anthropic/claude-opus-5.5
24
25
  anthropic/claude-fable-5.1: anthropic/claude-opus-5.5
25
26
  anthropic/claude-fable-5: anthropic/claude-opus-5.5
26
27
  model_alternatives:
27
28
  opus:
28
29
  claude-opus-5: anthropic/claude-opus-5
30
+ claude-fable-5-2: anthropic/claude-fable-5.2
29
31
  claude-fable-5-1: anthropic/claude-fable-5.1
30
32
  claude-fable-5: anthropic/claude-fable-5
31
33
  claude-opus-4-8: anthropic/claude-opus-4.8
@@ -1361,10 +1361,35 @@ models:
1361
1361
  tags: []
1362
1362
 
1363
1363
  # --- Claude Fable Series ---
1364
- # Fable 5.1 is the current Fable family default (unversioned aliases and the
1365
- # named review worker), but not a catalog tier default: the opus tier remains
1366
- # on Opus 5.5. Fable 5.1 adds max effort to Fable 5's adaptive-only request
1367
- # surface; both versions stay selectable via --model (opus alternatives).
1364
+ # Stable Fable aliases and the named worker select 5.2. The opus tier stays on
1365
+ # Opus 5.5; earlier Fable versions remain explicit opus alternatives.
1366
+ # https://platform.claude.com/docs/en/models/fable-5-2/overview
1367
+ claude-fable-5-2:
1368
+ friendly_name: Claude Fable 5.2
1369
+ context_window_tokens: 1000000
1370
+ max_output_tokens: 128000
1371
+ max_thinking_tokens: 128000
1372
+ supports_thinking: true
1373
+ supports_images: true
1374
+ supports_1m_context: true
1375
+ temperature_constraint: fixed
1376
+ temperature: 1.0
1377
+ supports_top_p: false
1378
+ supports_sampling_overrides: false
1379
+ default_timeout_seconds: 240
1380
+ prompt_caching:
1381
+ supports: true
1382
+ mechanism: cache_control
1383
+ min_tokens: 512
1384
+ max_cache_blocks: 4
1385
+ native_thinking_param: output_config.effort
1386
+ thinking_modes: [adaptive]
1387
+ supports_forced_tool_choice: false
1388
+ litellm_reasoning_efforts: [low, medium, high, xhigh, max]
1389
+ default_reasoning_effort: high
1390
+ token_estimate_multiplier: 1.35
1391
+ tags: [opt-in]
1392
+
1368
1393
  claude-fable-5-1:
1369
1394
  friendly_name: Claude Fable 5.1
1370
1395
  context_window_tokens: 1000000
@@ -1385,6 +1410,7 @@ models:
1385
1410
  max_cache_blocks: 4
1386
1411
  native_thinking_param: output_config.effort
1387
1412
  thinking_modes: [adaptive]
1413
+ supports_forced_tool_choice: false
1388
1414
  litellm_reasoning_efforts: [low, medium, high, xhigh, max]
1389
1415
  default_reasoning_effort: high
1390
1416
  token_estimate_multiplier: 1.35
@@ -2506,14 +2532,21 @@ aliases:
2506
2532
  anthropic/claude-opus-5: claude-opus-5 # also the OpenRouter slug (no dot)
2507
2533
  opus-5: claude-opus-5
2508
2534
 
2509
- # Fable 5.1 (current family default; opus --model alternative)
2535
+ # Fable 5.2 (current family default; opus --model alternative)
2536
+ anthropic/claude-fable-5-2: claude-fable-5-2
2537
+ anthropic/claude-fable-5.2: claude-fable-5-2 # OpenRouter slug
2538
+ claude-fable-5.2: claude-fable-5-2
2539
+ claude-fable: claude-fable-5-2
2540
+ fable-5-2: claude-fable-5-2
2541
+ fable-5.2: claude-fable-5-2
2542
+ fable: claude-fable-5-2
2543
+
2544
+ # Fable 5.1 (retained explicit prior-version aliases)
2510
2545
  anthropic/claude-fable-5-1: claude-fable-5-1
2511
2546
  anthropic/claude-fable-5.1: claude-fable-5-1 # OpenRouter slug
2512
2547
  claude-fable-5.1: claude-fable-5-1
2513
- claude-fable: claude-fable-5-1
2514
2548
  fable-5-1: claude-fable-5-1
2515
2549
  fable-5.1: claude-fable-5-1
2516
- fable: claude-fable-5-1
2517
2550
 
2518
2551
  # Fable 5 (retained explicit prior-version aliases)
2519
2552
  anthropic/claude-fable-5: claude-fable-5
@@ -946,6 +946,11 @@ models:
946
946
  - kind: direct
947
947
  runtime: claude_code
948
948
  model_ref: claude-opus-5
949
+ claude-fable-5-2:
950
+ routes:
951
+ - kind: direct
952
+ runtime: claude_code
953
+ model_ref: claude-fable-5-2
949
954
  claude-fable-5-1:
950
955
  routes:
951
956
  - kind: direct
@@ -143,19 +143,21 @@ def resolve_client_base_url(model: str) -> str | None:
143
143
  def target_is_forge_proxy(base_url: str | None) -> bool:
144
144
  """True if ``base_url`` is a known Forge proxy endpoint.
145
145
 
146
- Reverse-lookup in the proxy registry (``~/.forge/proxies/index.json``).
147
- Best-effort: any failure (no registry, unreadable, lookup error) returns
148
- False -- callers must not stamp ``cost_request_id`` unless this is certain,
149
- or the ledger would carry a back-reference to a cost record that never
150
- materialized.
146
+ Membership check in the proxy registry (``~/.forge/proxies/index.json``);
147
+ any registered entry qualifies, even when several share the URL and none
148
+ owns it alone. Best-effort: any failure (no registry, unreadable, lookup
149
+ error) returns False -- callers must not stamp ``cost_request_id`` unless
150
+ this is certain, or the ledger would carry a back-reference to a cost record
151
+ that never materialized.
151
152
  """
152
153
  if not base_url:
153
154
  return False
154
155
  try:
155
- from forge.proxy.proxies import ProxyRegistryStore, lookup_proxy_by_base_url
156
+ from forge.proxy.proxies import ProxyRegistryStore
156
157
 
158
+ normalized = base_url.rstrip("/")
157
159
  registry = ProxyRegistryStore().read()
158
- return lookup_proxy_by_base_url(registry, base_url.rstrip("/")) is not None
160
+ return any(entry.base_url == normalized for entry in registry.proxies.values())
159
161
  except Exception as e:
160
162
  logger.debug("target_is_forge_proxy(%s) failed, treating as non-proxy: %s", base_url, e)
161
163
  return False
@@ -9,9 +9,11 @@ from forge.core.models.model_reference import strip_transport_model_suffix
9
9
 
10
10
  # Full bundled-default/alternative audit against OpenRouter's ZDR endpoint
11
11
  # catalog on 2026-08-21, refreshed for the September releases on 2026-09-23.
12
+ # Fable 5.2 was checked separately on 2026-11-10.
12
13
  # These slugs had no eligible endpoint. Request-level provider.zdr remains authoritative
13
14
  # if this dated snapshot becomes stale.
14
15
  BUILTIN_OPENROUTER_ZDR_FALLBACKS = {
16
+ "anthropic/claude-fable-5.2": "anthropic/claude-opus-5.5",
15
17
  "anthropic/claude-fable-5.1": "anthropic/claude-opus-5.5",
16
18
  "anthropic/claude-fable-5": "anthropic/claude-opus-5.5",
17
19
  "qwen/qwen3.6-flash": "qwen/qwen3.8-27b",
@@ -111,24 +111,31 @@ def get_proxy_registry_path() -> Path:
111
111
  return get_forge_home() / PROXIES_DIR / PROXY_INDEX_FILENAME
112
112
 
113
113
 
114
+ # Proxy statuses that represent a routable (active) proxy.
115
+ ROUTABLE_STATUSES = frozenset({"healthy", "starting"})
116
+
117
+
114
118
  def lookup_proxy_by_base_url(registry: ProxyRegistry, base_url: str) -> ProxyEntry | None:
115
- """Reverse lookup: find proxy entry by base_url.
119
+ """Reverse lookup: find the proxy entry that owns base_url.
120
+
121
+ Template starts spawn new proxy ids on the template's default port, so stopped
122
+ instances accumulate on one base_url. A sole registered entry owns its URL in
123
+ any status; among several, only a sole routable entry does, mirroring the
124
+ template fallback in ``resolve_proxy``. Returning the first match instead would
125
+ attribute a live session to whichever stale instance was registered earliest.
116
126
 
117
127
  Args:
118
128
  registry: The proxy registry to search.
119
129
  base_url: The URL to match (e.g., "http://localhost:8084").
120
130
 
121
131
  Returns:
122
- The matching ProxyEntry, or None if no proxy owns that base_url.
132
+ The owning ProxyEntry, or None if no entry, or no single routable entry, owns that base_url.
123
133
  """
124
- for entry in registry.proxies.values():
125
- if entry.base_url == base_url:
126
- return entry
127
- return None
128
-
129
-
130
- # Proxy statuses that represent a routable (active) proxy.
131
- ROUTABLE_STATUSES = frozenset({"healthy", "starting"})
134
+ matches = [entry for entry in registry.proxies.values() if entry.base_url == base_url]
135
+ if len(matches) == 1:
136
+ return matches[0]
137
+ active = [entry for entry in matches if entry.status in ROUTABLE_STATUSES]
138
+ return active[0] if len(active) == 1 else None
132
139
 
133
140
 
134
141
  class ProxyResolutionError(Exception):
@@ -472,8 +472,8 @@ forge proxy template show openrouter-qwen
472
472
  - [ ] `openrouter-qwen` maps tiers to Qwen models (haiku/sonnet=qwen3.8-27b, opus=qwen3.8-max)
473
473
  - [ ] `openrouter-qwen` exposes `qwen3.8-flash` and the distinct `qwen3.8-max-0902` snapshot
474
474
  - [ ] Every OpenRouter template defaults `allow_non_zdr` to false; no LiteLLM template contains ZDR fields
475
- - [ ] The dated ZDR audit fallbacks map Fable 5.1/Fable 5 to Opus 5.5 and cover all eight bundled non-ZDR Qwen slugs;
476
- both Qwen3.8 Max entries map to `qwen/qwen3.8-2.4t-a95b`, and Qwen3.8 Flash maps to `qwen/qwen3.8-27b`
475
+ - [ ] The dated ZDR audit fallbacks map Fable 5.2/5.1/5 to Opus 5.5 and cover all eight bundled non-ZDR Qwen slugs; both
476
+ Qwen3.8 Max entries map to `qwen/qwen3.8-2.4t-a95b`, and Qwen3.8 Flash maps to `qwen/qwen3.8-27b`
477
477
  - [ ] `openrouter-openai` maps tiers to GPT models (haiku=gpt-5.4-mini, sonnet=gpt-6-astra, opus=gpt-6-astra)
478
478
  - [ ] `openrouter-openai-codex` maps tiers to Codex models (haiku=gpt-5.1-codex-mini, sonnet=gpt-5.3-codex,
479
479
  opus=gpt-6-astra)
File without changes
File without changes
File without changes
File without changes