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.
- {multi_forge-1.1.4 → multi_forge-1.1.5}/PKG-INFO +2 -2
- {multi_forge-1.1.4 → multi_forge-1.1.5}/pyproject.toml +3 -3
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/backends/litellm.yaml +42 -1
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-anthropic-local.yaml +2 -1
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-anthropic.yaml +3 -2
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-anthropic.yaml +4 -2
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/model_catalog.yaml +40 -7
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/model_routes.yaml +5 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/correlation.py +9 -7
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/model_routes.py +2 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/proxies.py +17 -10
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/4-proxy.md +2 -2
- {multi_forge-1.1.4 → multi_forge-1.1.5}/.gitignore +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/LICENSE +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/NOTICE +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/README.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/agents/.gitkeep +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/commands/.gitkeep +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/adapters/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/adapters/litellm.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/creation.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/registry.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/remote/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/remote/base.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/remote/openrouter.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/backend/sources.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/activity.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/auth.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/backend.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/claude.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/codex.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/config_cmd.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/consumer_lane_freeze.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/editor.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/extensions.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/gc.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/guards.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/_group.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/_helpers.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/authority.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/codex_patch.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/codex_policy.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/codex_policy_feedback.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/codex_stop.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/codex_transfer.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/commands.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/direct_commands.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/policy.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/protocols.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/read_hygiene.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/hooks/verification.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/info.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/logs.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/main.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/memory.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/memory_report.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/memory_writer.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/model.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/output.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/policy.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/proxy.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/proxy_audit.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/proxy_costs.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/runtime.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/search.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_adopt.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_authority.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_authority_options.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_codex.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_delete.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_derived_preflight.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_effort_hint.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_fork.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_lane.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_launch_args.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_lifecycle.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_manage.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_memory.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_model.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_repair.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_resume_modes.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_rewind.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_route_recovery.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_routing.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/session_supervisor_options.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/status_line.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/context.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/effort.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/formatting.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/names.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/palette.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/registry.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/rendering.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/routing.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/sources.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/throttle.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/statusline/types.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/supervisor_auth.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/telemetry.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/trace.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/transfer.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/workflow.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/cli/workspace.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/dataclass_utils.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/backends/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/anthropic-passthrough.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/codex-responses-local.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-gemini-flash-local.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-gemini-local.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-gemini-test.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-gemini.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-openai-codex-local.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-openai-local.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-openai.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-deepseek.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-gemini-flash.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-gemini.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-glm.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-kimi.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-minimax.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-openai-codex.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-openai.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/openrouter-qwen.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/loader.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/schema.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/auth/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/auth/capabilities.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/auth/credentials_file.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/auth/protocols.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/auth/secrets.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/auth/template_secrets.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/backend_dependency.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/credential_registry.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/model_practices.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/system_prompt_addendums/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/system_prompt_addendums/gemini.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/data/system_prompt_addendums/openai.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/effort.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/effort_observation.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/identifiers.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/_lifecycle.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/claude.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/codex.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/codex_fork.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/codex_stream.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/invoker/types.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/judgments/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/judgments/openrouter.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/judgments/types.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/judgments/usage.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/lanes.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/clients/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/clients/base.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/clients/effort.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/clients/litellm.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/clients/openai_compat.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/clients/openrouter.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/credentials.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/detection.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/errors.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/openrouter_policy.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/protocols.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/llm/types.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/logging.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/metric_formatting.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/catalog.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/direct_model.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/model_practices.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/model_reference.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/model_routes.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/models/types.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/naming.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/native_review_types.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/backend_reconcile.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/claude_session.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/codex_adopt.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/codex_bridge.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/codex_enrollment.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/codex_interactive.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/codex_session.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/codex_thread_index.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/context.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/gc.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/policy.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/provider_trace.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/proxy.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/resolution.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_active.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_adopt.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_authority.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_authority_launch.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_context.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_fork_execution.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_fork_preflight.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_model.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_model_routing.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_repair.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/session_routing.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/transfer.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/usage_summary.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/ops/workspace.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/paths.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/process.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/provider_types.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/codex_reviewer_home.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/cost_tracking.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/env.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/headless_json.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/llm_call.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/proxy.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/reviewer_runtime.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/reviewer_settings.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/routing.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/session_runner.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/structured_output.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/supervisor_auth.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/tagger.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/throttle.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/reactive/watchdog.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/run_id.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/codex_feedback.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/codex_preflight.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/codex_preflight_cache.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/codex_review_source.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/codex_rollouts.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/codex_turn_enrollment.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/launch_args.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime/registry.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/runtime_vocab.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/exceptions.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/io.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/lock.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/retention.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/timestamps.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/state/versioned_store.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/caps.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/downstream.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/downstream_retention.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/jsonl_io.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/upstream.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/telemetry/vocabulary.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/tiers.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/transcript.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/typing_helpers.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/billing.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/emit.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/ledger.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/measurement.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/usage/vocabulary.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/wire_shapes.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/worker_controls.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/workqueue/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/workqueue/queue.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/core/workqueue/types.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/codex_hooks.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/doctor.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/exceptions.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/hook_dispatcher.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/hook_migration.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/hooks.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/installer.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/models.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/module_planning.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/ownership.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/path_policy.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/preset.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/project_compat.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/project_registry.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/runtime_removal.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/settings_merge.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/settings_rollback.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/skill_cache.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/skill_compiler.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/skill_planning.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/skill_validation.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/tracking.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/unmanaged.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/install/version.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/action_identity.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/deterministic/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/deterministic/base.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/deterministic/coding_standards.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/deterministic/registry.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/deterministic/tdd.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/diff.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/engine.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/protocols.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/queries.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/attempts.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/deadline.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/identity.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/native_codex.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/plan_check.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/plan_source.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/shadow.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/shadow_runner.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/stop_review.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/supervisor.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/turn_evidence.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/semantic/verdict.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/store.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/supervisor_lane_degrade.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/team/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/team/config.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/team/handlers.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/team/prompts.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/policy/types.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/accounting_persistence.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/audit_logger.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/base_client.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/client_adapter.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/client_factory.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/converters.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/cost_logger.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/cost_tracker.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/data_models.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/effort_observation.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/error_hints.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/intercept.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/metrics.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/passthrough.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/passthrough_ingress.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/ports.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/provider_trace_logger.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/proxy_identity.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/proxy_orchestrator.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/proxy_startup.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/reasoning.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/request_id.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/response_headers.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/responses_ingress.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/responses_passthrough.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/runtime_truth.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/server.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/sse_framing.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/stream_relay.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/proxy/utils.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/adversarial.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/backend_readiness.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/consensus.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/engine.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/models.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/code_consensus_evaluation.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/code_debate_evaluation.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/codereview-performance.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/codereview-quick.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/codereview-security.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/codereview.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/consensus_evaluation.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/debate_evaluation.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/docreview-quick.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/docreview.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/resources/thinkdeep.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/routing.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/synthesis.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/review/worker_preparation.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/runtime_config.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/bm25_store.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/cleanup.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/content_store.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/engine.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/exceptions.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/extractor.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/index_state.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/store.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/search/tokenizer.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/active.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/addendum.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/artifacts.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/authority.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/claude/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/claude/cleanup.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/claude/invoke.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/claude/paths.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/claude/relocate.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/cleanup.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/cleanup_content.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/cleanup_dependencies.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/cleanup_git.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/cleanup_state.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/codex_handoff.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/codex_invoke.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/config.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/consumer_lanes.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/context_limit.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/context_rendering.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/deletion.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/derived_overrides.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/effective.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/events.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/exceptions.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/git.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/hooks/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/hooks/models.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/hooks/producers.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/hooks/session_start.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/identity.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/index.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/launch.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/launch_confirmation.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/launchability.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/manager.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/memory_inheritance.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/memory_writer.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/model_pin.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/models.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/overrides.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/passport.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/plan_resolution.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/prev_sessions.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/project_memory.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/purge_native.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/rewind.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/routing.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/shadow_curation.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/store.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/transfer.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/validation.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/verification_config.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/workers.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/workspace.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/worktree/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/worktree/cleanup.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/worktree/config_copy.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/session/worktree/create.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/sidecar/__init__.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/sidecar/container.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/sidecar/docker.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/analyze/content.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/analyze/forge-skill.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/challenge/content.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/challenge/forge-skill.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/consensus/content.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/consensus/forge-skill.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/consensus/resources/synthesis.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/debate/content.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/debate/forge-skill.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/panel/content.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/panel/forge-skill.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/panel/resources/synthesis.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/SKILL.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/0-enable.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/1-preflight.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/10-resume.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/11-config.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/12-search.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/13-policy.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/14-workflow.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/15-skills.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/16-memory.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/17-info.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/18-disable.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/19-uninstall.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/2-extension.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/20-cleanup.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/3-authentication.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/5-session.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/6-hook.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/7-costs.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/8-status-line.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist/9-direct-commands.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/checklist.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/coverage-map.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/execution-budget.json +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/report-template.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/resources/runtime-matrix.json +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/scripts/qa-artifact.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/scripts/qa-run-metrics.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/scripts/qa-selection.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/scripts/start-container.sh +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/qa/scripts/walkthrough-state.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/content.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/forge-skill.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/references/claude-4.6.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/references/claude-4.8.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/references/gemini-3.1.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/references/gpt-5.5.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/references/skills-writing-guide.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/resources/code-anthropic.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/resources/code-gemini.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/resources/code-openai.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review/resources/code.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review-docs/content.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review-docs/forge-skill.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review-docs/resources/docs-anthropic.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review-docs/resources/docs-gemini.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review-docs/resources/docs-openai.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/review-docs/resources/docs.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/smoke-test/content.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/smoke-test/forge-skill.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/smoke-test/scripts/smoke-test.sh +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/content.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/forge-skill.yaml +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/code-anthropic.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/code-gemini.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/code-openai.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/code.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/docs-anthropic.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/docs-gemini.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/docs-openai.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/understand/resources/docs.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/SKILL.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/resources/checklist.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/resources/journey-map.md +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/claude-wrapper.sh +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/cleanup-owned.sh +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/package-identity.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/protected-paths.py +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/run-in-repo.sh +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/setup-test-repo.sh +0 -0
- {multi_forge-1.1.4 → multi_forge-1.1.5}/src/skills/walkthrough/scripts/walkthrough-report.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
{multi_forge-1.1.4 → multi_forge-1.1.5}/src/forge/config/defaults/templates/litellm-anthropic.yaml
RENAMED
|
@@ -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
|
|
1365
|
-
#
|
|
1366
|
-
#
|
|
1367
|
-
|
|
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.
|
|
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
|
|
@@ -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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
|
156
|
+
from forge.proxy.proxies import ProxyRegistryStore
|
|
156
157
|
|
|
158
|
+
normalized = base_url.rstrip("/")
|
|
157
159
|
registry = ProxyRegistryStore().read()
|
|
158
|
-
return
|
|
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
|
|
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
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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/
|
|
476
|
-
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|