multi-forge 0.7.1__tar.gz → 0.8.1__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-0.7.1 → multi_forge-0.8.1}/PKG-INFO +23 -8
- {multi_forge-0.7.1 → multi_forge-0.8.1}/README.md +22 -7
- {multi_forge-0.7.1 → multi_forge-0.8.1}/pyproject.toml +1 -1
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/__init__.py +5 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/activity.py +1 -1
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/claude.py +6 -6
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/codex.py +25 -16
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/extensions.py +428 -26
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/gc.py +46 -5
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/guards.py +20 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/hooks/__init__.py +0 -8
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/hooks/_group.py +3 -3
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/hooks/codex_transfer.py +5 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/hooks/commands.py +128 -18
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/hooks/direct_commands.py +42 -3
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/hooks/policy.py +2 -2
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/main.py +36 -3
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/memory.py +189 -51
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/memory_writer.py +19 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/policy.py +35 -7
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/search.py +51 -3
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/session.py +8 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/session_fork.py +34 -4
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/session_lane.py +35 -7
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/session_lifecycle.py +30 -18
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/session_manage.py +111 -12
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/session_memory.py +10 -8
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/status_line.py +65 -30
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/statusline/names.py +1 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/statusline/registry.py +15 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/workflow.py +11 -2
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/auth/template_secrets.py +2 -2
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/llm/__init__.py +3 -2
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/llm/clients/__init__.py +1 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/llm/detection.py +4 -1
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/claude_session.py +47 -7
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/codex_enrollment.py +6 -5
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/context.py +3 -19
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/gc.py +249 -10
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/session.py +21 -2
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/session_context.py +1 -1
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/transfer.py +15 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/paths.py +17 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/reactive/env.py +3 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/state/io.py +28 -3
- multi_forge-0.8.1/src/forge/core/tiers.py +18 -0
- multi_forge-0.8.1/src/forge/core/transcript.py +169 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/install/codex_hooks.py +155 -48
- multi_forge-0.8.1/src/forge/install/doctor.py +270 -0
- multi_forge-0.8.1/src/forge/install/hook_dispatcher.py +780 -0
- multi_forge-0.8.1/src/forge/install/hook_migration.py +982 -0
- multi_forge-0.8.1/src/forge/install/hooks.py +431 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/install/installer.py +128 -33
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/install/models.py +4 -1
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/install/preset.py +46 -19
- multi_forge-0.8.1/src/forge/install/project_compat.py +363 -0
- multi_forge-0.8.1/src/forge/install/project_registry.py +329 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/install/settings_merge.py +3 -1
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/semantic/supervisor.py +11 -12
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/client_factory.py +2 -12
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/data_models.py +8 -34
- multi_forge-0.8.1/src/forge/proxy/ports.py +27 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/proxy_orchestrator.py +14 -13
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/server.py +78 -131
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/engine.py +1 -1
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/routing.py +28 -9
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/cleanup.py +33 -4
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/consumer_lanes.py +11 -8
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/hooks/session_start.py +8 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/launch.py +11 -2
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/manager.py +60 -3
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/memory_writer.py +16 -16
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/model_pin.py +1 -1
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/overrides.py +3 -2
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/passport.py +232 -16
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/project_memory.py +15 -2
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/rewind.py +10 -8
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/store.py +2 -1
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/transfer.py +11 -94
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/worktree/__init__.py +4 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/worktree/create.py +92 -2
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/sidecar/__init__.py +1 -1
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/16-memory.md +81 -2
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/18-disable.md +0 -3
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/2-extension.md +43 -9
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/6-hook.md +7 -11
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist.md +16 -10
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/walkthrough/resources/checklist.md +134 -11
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/walkthrough/scripts/run-in-repo.sh +22 -2
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/walkthrough/scripts/setup-test-repo.sh +14 -7
- multi_forge-0.7.1/src/forge/cli/hooks/install.py +0 -236
- multi_forge-0.7.1/src/forge/core/transcript.py +0 -78
- multi_forge-0.7.1/src/forge/install/hooks.py +0 -109
- multi_forge-0.7.1/src/forge/sidecar/secrets.py +0 -19
- {multi_forge-0.7.1 → multi_forge-0.8.1}/.gitignore +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/LICENSE +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/NOTICE +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/agents/.gitkeep +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/commands/.gitkeep +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/backend/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/backend/adapters/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/backend/adapters/litellm.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/backend/creation.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/backend/registry.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/backend/remote/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/backend/remote/base.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/backend/remote/openrouter.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/backend/sources.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/auth.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/backend.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/config_cmd.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/consumer_lane_freeze.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/editor.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/hooks/_helpers.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/hooks/codex_patch.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/hooks/codex_policy.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/hooks/protocols.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/hooks/read_hygiene.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/hooks/verification.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/logs.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/memory_report.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/model.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/output.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/proxy.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/proxy_audit.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/proxy_costs.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/runtime.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/session_codex.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/session_model_pin.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/session_resume_modes.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/session_rewind.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/session_routing.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/session_supervisor_options.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/statusline/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/statusline/context.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/statusline/palette.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/statusline/throttle.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/telemetry.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/trace.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/cli/transfer.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/dataclass_utils.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/backends/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/backends/litellm.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/anthropic-passthrough.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/codex-responses-local.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/litellm-anthropic-local.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/litellm-anthropic.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/litellm-gemini-flash-local.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/litellm-gemini-local.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/litellm-gemini-test.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/litellm-gemini.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/litellm-openai-codex-local.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/litellm-openai-local.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/litellm-openai.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/openrouter-anthropic.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/openrouter-deepseek.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/openrouter-gemini-flash.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/openrouter-gemini.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/openrouter-glm.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/openrouter-kimi.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/openrouter-minimax.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/openrouter-openai-codex.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/openrouter-openai.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/defaults/templates/openrouter-qwen.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/loader.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/config/schema.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/auth/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/auth/capabilities.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/auth/credentials_file.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/auth/protocols.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/auth/secrets.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/backend_dependency.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/credential_registry.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/data/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/data/model_catalog.yaml +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/data/system_prompt_addendums/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/data/system_prompt_addendums/gemini.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/data/system_prompt_addendums/openai.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/effort.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/invoker/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/invoker/_lifecycle.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/invoker/claude.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/invoker/codex.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/invoker/codex_stream.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/invoker/types.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/lanes.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/llm/clients/base.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/llm/clients/litellm.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/llm/clients/openai_compat.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/llm/clients/openrouter.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/llm/credentials.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/llm/errors.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/llm/protocols.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/llm/types.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/logging.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/models/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/models/catalog.py +0 -0
- {multi_forge-0.7.1/src/forge/session → multi_forge-0.8.1/src/forge/core/models}/direct_model.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/models/types.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/naming.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/backend_reconcile.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/codex_bridge.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/codex_interactive.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/codex_session.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/policy.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/provider_trace.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/proxy.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/resolution.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/ops/usage_summary.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/process.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/provider_types.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/reactive/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/reactive/cost_tracking.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/reactive/headless_json.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/reactive/proxy.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/reactive/routing.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/reactive/session_runner.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/reactive/structured_output.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/reactive/tagger.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/reactive/throttle.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/run_id.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/runtime/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/runtime/codex_preflight.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/runtime/codex_preflight_cache.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/runtime/codex_rollouts.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/runtime/registry.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/runtime_vocab.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/state/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/state/exceptions.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/state/lock.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/state/retention.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/state/timestamps.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/state/versioned_store.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/telemetry/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/telemetry/caps.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/telemetry/downstream.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/telemetry/jsonl_io.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/telemetry/upstream.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/telemetry/vocabulary.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/typing_helpers.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/usage/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/usage/billing.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/usage/correlation.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/usage/emit.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/usage/ledger.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/usage/measurement.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/usage/vocabulary.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/workqueue/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/workqueue/queue.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/core/workqueue/types.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/install/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/install/cli.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/install/exceptions.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/install/tracking.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/install/version.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/deterministic/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/deterministic/base.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/deterministic/coding_standards.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/deterministic/registry.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/deterministic/tdd.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/engine.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/protocols.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/queries.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/semantic/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/semantic/plan_check.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/semantic/shadow.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/semantic/shadow_runner.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/semantic/verdict.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/store.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/supervisor_lane_degrade.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/team/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/team/config.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/team/handlers.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/team/prompts.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/types.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/workflow/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/workflow/branches.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/workflow/config.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/workflow/divergence.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/workflow/policy.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/policy/workflow/stages.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/audit_logger.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/base_client.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/client_adapter.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/converters.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/cost_logger.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/cost_tracker.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/error_hints.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/intercept.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/metrics.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/model_spec.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/passthrough.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/provider_trace_logger.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/proxies.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/proxy_identity.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/proxy_startup.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/responses_ingress.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/responses_passthrough.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/stream_relay.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/proxy/utils.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/adversarial.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/consensus.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/models.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/resources/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/resources/code_consensus_evaluation.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/resources/code_debate_evaluation.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/resources/codereview-performance.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/resources/codereview-quick.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/resources/codereview-security.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/resources/codereview.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/resources/consensus_evaluation.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/resources/debate_evaluation.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/resources/docreview-quick.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/resources/docreview.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/resources/thinkdeep.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/review/synthesis.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/runtime_config.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/search/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/search/bm25_store.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/search/content_store.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/search/engine.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/search/exceptions.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/search/extractor.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/search/index_state.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/search/store.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/search/tokenizer.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/active.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/addendum.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/artifacts.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/claude/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/claude/cleanup.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/claude/invoke.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/claude/paths.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/claude/relocate.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/codex_handoff.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/codex_invoke.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/config.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/context_limit.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/effective.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/exceptions.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/hooks/__init__.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/hooks/models.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/identity.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/index.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/launch_confirmation.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/memory_inheritance.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/models.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/plan_resolution.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/prev_sessions.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/shadow_curation.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/validation.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/worktree/cleanup.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/session/worktree/config_copy.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/sidecar/container.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/forge/sidecar/docker.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/analyze/SKILL.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/challenge/SKILL.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/consensus/SKILL.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/consensus/resources/synthesis.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/debate/SKILL.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/panel/SKILL.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/panel/resources/synthesis.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/SKILL.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/0-enable.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/1-preflight.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/10-resume.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/11-config.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/12-search.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/13-policy.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/14-workflow.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/15-skills.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/17-info.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/19-uninstall.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/20-cleanup.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/3-authentication.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/4-proxy.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/5-session.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/7-costs.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/8-status-line.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/checklist/9-direct-commands.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/resources/report-template.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/scripts/start-container.sh +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/qa/scripts/walkthrough-state.py +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review/SKILL.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review/references/claude-4.6.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review/references/claude-4.8.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review/references/gemini-3.1.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review/references/gpt-5.5.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review/references/skills-writing-guide.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review/resources/code-anthropic.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review/resources/code-gemini.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review/resources/code-openai.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review/resources/code.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review-docs/SKILL.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review-docs/resources/docs-anthropic.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review-docs/resources/docs-gemini.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review-docs/resources/docs-openai.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/review-docs/resources/docs.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/smoke-test/SKILL.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/smoke-test/scripts/smoke-test.sh +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/understand/SKILL.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/understand/resources/code-anthropic.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/understand/resources/code-gemini.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/understand/resources/code-openai.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/understand/resources/code.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/understand/resources/docs-anthropic.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/understand/resources/docs-gemini.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/understand/resources/docs-openai.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/understand/resources/docs.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/walkthrough/SKILL.md +0 -0
- {multi_forge-0.7.1 → multi_forge-0.8.1}/src/skills/walkthrough/scripts/walkthrough-state.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: multi-forge
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.1
|
|
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
|
|
@@ -128,6 +128,8 @@ tracking, hooks, and all Forge features except multi-model routing. Use `--proxy
|
|
|
128
128
|
|
|
129
129
|
- **Platform**: macOS or Linux
|
|
130
130
|
- **Python**: 3.11–3.13 (3.14 blocked on upstream `uvloop` wheels — see #1)
|
|
131
|
+
- **Installer**: [`uv`](https://docs.astral.sh/uv/) or [`pipx`](https://pipx.pypa.io/) for the recommended global
|
|
132
|
+
install
|
|
131
133
|
- **Claude Code**: installed and on PATH
|
|
132
134
|
- **Provider auth**: Claude Code login is enough for direct interactive sessions. Proxies and headless workflows need a
|
|
133
135
|
supported API or gateway credential such as `OPENROUTER_API_KEY`, `ANTHROPIC_API_KEY`, `GEMINI_API_KEY`,
|
|
@@ -136,14 +138,27 @@ tracking, hooks, and all Forge features except multi-model routing. Use `--proxy
|
|
|
136
138
|
## Quick Start
|
|
137
139
|
|
|
138
140
|
```bash
|
|
139
|
-
# Install Forge
|
|
140
|
-
|
|
141
|
+
# Install Forge as a global tool (recommended -- puts `forge` on your PATH)
|
|
142
|
+
uv tool install multi-forge
|
|
143
|
+
# or: pipx install multi-forge
|
|
141
144
|
|
|
142
|
-
#
|
|
143
|
-
|
|
144
|
-
cd multi-forge && pip install -e .
|
|
145
|
+
# Confirm how forge is installed and whether it is globally reachable
|
|
146
|
+
forge extension doctor
|
|
145
147
|
|
|
146
|
-
#
|
|
148
|
+
# For development on Forge itself (editable install from a local clone):
|
|
149
|
+
git clone https://github.com/hapa1i/multi-forge.git
|
|
150
|
+
cd multi-forge && uv sync
|
|
151
|
+
# When FORGE_DEV is unset, eligible host hooks use an executable recorded or
|
|
152
|
+
# known-location launcher. Install the persistent editable launcher too:
|
|
153
|
+
./scripts/setup.sh --local
|
|
154
|
+
# Make uv's tool bin available in this shell and future shells:
|
|
155
|
+
uv tool update-shell
|
|
156
|
+
export PATH="$(uv tool dir --bin):$PATH"
|
|
157
|
+
|
|
158
|
+
# Register only runtime hooks at user scope
|
|
159
|
+
forge extension enable --scope user --profile minimal --with hooks,codex-hooks --without commands
|
|
160
|
+
|
|
161
|
+
# Then, inside a project: install project-owned assets and settings
|
|
147
162
|
forge extension enable
|
|
148
163
|
|
|
149
164
|
# Launch Claude with session tracking (no proxy needed)
|
|
@@ -249,7 +264,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and PR guidelines.
|
|
|
249
264
|
|
|
250
265
|
```bash
|
|
251
266
|
forge extension disable
|
|
252
|
-
|
|
267
|
+
uv tool uninstall multi-forge # or: pipx uninstall multi-forge
|
|
253
268
|
```
|
|
254
269
|
|
|
255
270
|
## License
|
|
@@ -87,6 +87,8 @@ tracking, hooks, and all Forge features except multi-model routing. Use `--proxy
|
|
|
87
87
|
|
|
88
88
|
- **Platform**: macOS or Linux
|
|
89
89
|
- **Python**: 3.11–3.13 (3.14 blocked on upstream `uvloop` wheels — see #1)
|
|
90
|
+
- **Installer**: [`uv`](https://docs.astral.sh/uv/) or [`pipx`](https://pipx.pypa.io/) for the recommended global
|
|
91
|
+
install
|
|
90
92
|
- **Claude Code**: installed and on PATH
|
|
91
93
|
- **Provider auth**: Claude Code login is enough for direct interactive sessions. Proxies and headless workflows need a
|
|
92
94
|
supported API or gateway credential such as `OPENROUTER_API_KEY`, `ANTHROPIC_API_KEY`, `GEMINI_API_KEY`,
|
|
@@ -95,14 +97,27 @@ tracking, hooks, and all Forge features except multi-model routing. Use `--proxy
|
|
|
95
97
|
## Quick Start
|
|
96
98
|
|
|
97
99
|
```bash
|
|
98
|
-
# Install Forge
|
|
99
|
-
|
|
100
|
+
# Install Forge as a global tool (recommended -- puts `forge` on your PATH)
|
|
101
|
+
uv tool install multi-forge
|
|
102
|
+
# or: pipx install multi-forge
|
|
100
103
|
|
|
101
|
-
#
|
|
102
|
-
|
|
103
|
-
cd multi-forge && pip install -e .
|
|
104
|
+
# Confirm how forge is installed and whether it is globally reachable
|
|
105
|
+
forge extension doctor
|
|
104
106
|
|
|
105
|
-
#
|
|
107
|
+
# For development on Forge itself (editable install from a local clone):
|
|
108
|
+
git clone https://github.com/hapa1i/multi-forge.git
|
|
109
|
+
cd multi-forge && uv sync
|
|
110
|
+
# When FORGE_DEV is unset, eligible host hooks use an executable recorded or
|
|
111
|
+
# known-location launcher. Install the persistent editable launcher too:
|
|
112
|
+
./scripts/setup.sh --local
|
|
113
|
+
# Make uv's tool bin available in this shell and future shells:
|
|
114
|
+
uv tool update-shell
|
|
115
|
+
export PATH="$(uv tool dir --bin):$PATH"
|
|
116
|
+
|
|
117
|
+
# Register only runtime hooks at user scope
|
|
118
|
+
forge extension enable --scope user --profile minimal --with hooks,codex-hooks --without commands
|
|
119
|
+
|
|
120
|
+
# Then, inside a project: install project-owned assets and settings
|
|
106
121
|
forge extension enable
|
|
107
122
|
|
|
108
123
|
# Launch Claude with session tracking (no proxy needed)
|
|
@@ -208,7 +223,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and PR guidelines.
|
|
|
208
223
|
|
|
209
224
|
```bash
|
|
210
225
|
forge extension disable
|
|
211
|
-
|
|
226
|
+
uv tool uninstall multi-forge # or: pipx uninstall multi-forge
|
|
212
227
|
```
|
|
213
228
|
|
|
214
229
|
## License
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
"""Multi-Forge - Multi-runtime agent toolkit."""
|
|
2
2
|
|
|
3
|
+
import logging
|
|
3
4
|
from importlib.metadata import PackageNotFoundError, version
|
|
4
5
|
|
|
6
|
+
# Forge is both a library and a CLI. Keep library warnings from falling through
|
|
7
|
+
# Python's lastResort stderr handler when CLI file logging is disabled.
|
|
8
|
+
logging.getLogger(__name__).addHandler(logging.NullHandler())
|
|
9
|
+
|
|
5
10
|
try:
|
|
6
11
|
# Single source of truth is pyproject.toml; reading installed metadata keeps
|
|
7
12
|
# ``__version__`` from drifting (a hardcoded literal once shipped 0.5.0 while
|
|
@@ -54,7 +54,7 @@ def activity_cmd(session: str | None, as_json: bool, period: str) -> None:
|
|
|
54
54
|
|
|
55
55
|
\b
|
|
56
56
|
Examples:
|
|
57
|
-
forge telemetry activity # current session
|
|
57
|
+
forge telemetry activity # current session
|
|
58
58
|
forge telemetry activity planner # a named session (or Claude UUID)
|
|
59
59
|
forge telemetry activity --period week # this week
|
|
60
60
|
forge telemetry activity --period all --json
|
|
@@ -18,6 +18,10 @@ import httpx
|
|
|
18
18
|
from rich.console import Console
|
|
19
19
|
|
|
20
20
|
from forge.cli.output import err_console, print_error, print_error_with_tip
|
|
21
|
+
from forge.core.models.direct_model import (
|
|
22
|
+
apply_direct_model_env,
|
|
23
|
+
apply_proxy_context_model_defaults,
|
|
24
|
+
)
|
|
21
25
|
from forge.core.paths import display_path
|
|
22
26
|
from forge.core.reactive.env import FORGE_PROXY_WIRE_SHAPE_VAR, resolve_proxy_wire_shape
|
|
23
27
|
from forge.proxy.proxies import (
|
|
@@ -25,10 +29,6 @@ from forge.proxy.proxies import (
|
|
|
25
29
|
ProxyResolutionError,
|
|
26
30
|
)
|
|
27
31
|
from forge.session.context_limit import _get_context_limit_for_proxy
|
|
28
|
-
from forge.session.direct_model import (
|
|
29
|
-
apply_direct_model_env,
|
|
30
|
-
apply_proxy_context_model_defaults,
|
|
31
|
-
)
|
|
32
32
|
|
|
33
33
|
console = Console()
|
|
34
34
|
|
|
@@ -151,7 +151,7 @@ def start_cmd(
|
|
|
151
151
|
) -> None:
|
|
152
152
|
"""Start Claude Code with proxy routing or direct to Anthropic.
|
|
153
153
|
|
|
154
|
-
Bare launcher: no session state
|
|
154
|
+
Bare launcher: no session state (not a managed session). Use
|
|
155
155
|
``forge session start`` for managed sessions with lifecycle tracking.
|
|
156
156
|
|
|
157
157
|
\b
|
|
@@ -308,7 +308,7 @@ def preset_show(raw: bool = False, as_json: bool = False) -> None:
|
|
|
308
308
|
return
|
|
309
309
|
|
|
310
310
|
if raw:
|
|
311
|
-
|
|
311
|
+
click.echo(content, nl=False)
|
|
312
312
|
else:
|
|
313
313
|
console.print("[bold]Claude Code Settings Preset[/bold]")
|
|
314
314
|
console.print(f"[bold]Path:[/bold] {display_path(preset_path)}")
|
|
@@ -29,6 +29,10 @@ from forge.core.paths import display_path
|
|
|
29
29
|
from forge.core.runtime import get_runtime
|
|
30
30
|
from forge.core.runtime.codex_preflight import codex_proxy_contract_blocker
|
|
31
31
|
from forge.install.codex_hooks import (
|
|
32
|
+
CodexRegistrationKey,
|
|
33
|
+
codex_expected_registration_keys,
|
|
34
|
+
codex_registration_key,
|
|
35
|
+
codex_registration_keys,
|
|
32
36
|
codex_registration_pairs,
|
|
33
37
|
get_builtin_codex_entries,
|
|
34
38
|
get_codex_config_path,
|
|
@@ -108,23 +112,24 @@ def _runtime_info() -> _RuntimeInfo:
|
|
|
108
112
|
|
|
109
113
|
|
|
110
114
|
def _enrollment_posture(
|
|
111
|
-
expected: set[
|
|
112
|
-
actual: set[
|
|
113
|
-
commands_registered: tuple[str, ...],
|
|
115
|
+
expected: set[CodexRegistrationKey],
|
|
116
|
+
actual: set[CodexRegistrationKey],
|
|
114
117
|
) -> str:
|
|
115
118
|
"""Classify static registration as yes/no/partial/wrong-event (no probe).
|
|
116
119
|
|
|
117
|
-
`expected` is the builtin (event, command) set; `actual`
|
|
118
|
-
set really in the config
|
|
119
|
-
|
|
120
|
-
expected event is `wrong-event` (not merely missing).
|
|
120
|
+
`expected` is the builtin logical (event, command identity) set; `actual`
|
|
121
|
+
is the event-aware logical set really in the config. A command identity
|
|
122
|
+
present under the wrong event is `wrong-event` (not merely missing).
|
|
121
123
|
"""
|
|
122
124
|
if expected <= actual:
|
|
123
125
|
return "yes"
|
|
124
|
-
|
|
125
|
-
|
|
126
|
+
expected_event_by_identity = {(kind, value): event for event, kind, value in expected}
|
|
127
|
+
matching_actual = [
|
|
128
|
+
(event, kind, value) for event, kind, value in actual if (kind, value) in expected_event_by_identity
|
|
129
|
+
]
|
|
130
|
+
if not matching_actual:
|
|
126
131
|
return "no"
|
|
127
|
-
wrong_event = any((
|
|
132
|
+
wrong_event = any(event != expected_event_by_identity[(kind, value)] for event, kind, value in matching_actual)
|
|
128
133
|
return "wrong-event" if wrong_event else "partial"
|
|
129
134
|
|
|
130
135
|
|
|
@@ -177,9 +182,9 @@ def _scope_status(scope: InstallScope, project_root: Path | None, tracking: Trac
|
|
|
177
182
|
config_path = get_codex_config_path(scope, project_root)
|
|
178
183
|
entries = get_builtin_codex_entries()
|
|
179
184
|
registration = read_codex_registration(config_path, entries)
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
185
|
+
actual_pairs = codex_registration_pairs(config_path)
|
|
186
|
+
actual_keys = codex_registration_keys(config_path)
|
|
187
|
+
expected_keys = codex_expected_registration_keys(entries)
|
|
183
188
|
|
|
184
189
|
tracked_path: str | None = None
|
|
185
190
|
tracked_commands: list[str] = []
|
|
@@ -195,9 +200,11 @@ def _scope_status(scope: InstallScope, project_root: Path | None, tracking: Trac
|
|
|
195
200
|
config_path=display_path(config_path),
|
|
196
201
|
config_exists=config_path.exists(),
|
|
197
202
|
block_present=registration.block_present,
|
|
198
|
-
registered=_enrollment_posture(
|
|
203
|
+
registered=_enrollment_posture(expected_keys, actual_keys),
|
|
199
204
|
# Forge footprint only: unrelated user hooks in the same config are not ours to report.
|
|
200
|
-
registered_pairs=sorted(
|
|
205
|
+
registered_pairs=sorted(
|
|
206
|
+
f"{ev} -> {cmd}" for ev, cmd in actual_pairs if codex_registration_key(ev, cmd) in expected_keys
|
|
207
|
+
),
|
|
201
208
|
commands_registered=list(registration.commands_registered),
|
|
202
209
|
tracked_config_path=display_path(tracked_path) if tracked_path else None,
|
|
203
210
|
tracked_commands=tracked_commands,
|
|
@@ -376,7 +383,9 @@ def start_cmd(proxy: str, sandbox: str, codex_args: tuple[str, ...]) -> None:
|
|
|
376
383
|
# wire_shape is "openai_responses_passthrough" on success (uninformative); the
|
|
377
384
|
# failure path names the actual shape via the exception instead.
|
|
378
385
|
default_model, _ = assert_proxy_responses_capable(
|
|
379
|
-
entry.base_url,
|
|
386
|
+
entry.base_url,
|
|
387
|
+
expected_proxy_id=entry.proxy_id,
|
|
388
|
+
expected_template=entry.template,
|
|
380
389
|
)
|
|
381
390
|
except ProxyUnreachableError as e:
|
|
382
391
|
print_error_with_tip(
|