multi-forge 0.2.0__tar.gz → 0.2.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.2.0 → multi_forge-0.2.1}/PKG-INFO +6 -5
- {multi_forge-0.2.0 → multi_forge-0.2.1}/README.md +2 -1
- {multi_forge-0.2.0 → multi_forge-0.2.1}/pyproject.toml +15 -11
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/main.py +4 -0
- multi_forge-0.2.1/src/forge/cli/memory.py +1345 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/session_fork.py +95 -1
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/session_lifecycle.py +317 -37
- multi_forge-0.2.1/src/forge/cli/session_memory.py +38 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/loader.py +1 -1
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/auth/__init__.py +2 -2
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/auth/capabilities.py +4 -4
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/auth/template_secrets.py +8 -8
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/data/model_catalog.yaml +2 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/llm/clients/litellm.py +1 -1
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/llm/clients/openrouter.py +1 -1
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/reactive/session_runner.py +9 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/semantic/supervisor.py +16 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/proxy_orchestrator.py +4 -3
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/server.py +13 -7
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/utils.py +3 -2
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/engine.py +4 -2
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/exceptions.py +13 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/handoff_agent.py +120 -111
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/manager.py +59 -0
- multi_forge-0.2.1/src/forge/session/memory_inheritance.py +252 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/overrides.py +1 -1
- multi_forge-0.2.1/src/forge/session/passport.py +759 -0
- multi_forge-0.2.1/src/forge/session/shadow_curation.py +310 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/validation.py +21 -1
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/sidecar/secrets.py +2 -2
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/16-handoff.md +16 -13
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/scripts/walkthrough-state.py +89 -34
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/walkthrough/resources/checklist.md +9 -9
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/walkthrough/scripts/walkthrough-state.py +89 -34
- multi_forge-0.2.0/src/forge/cli/session_memory.py +0 -201
- {multi_forge-0.2.0 → multi_forge-0.2.1}/.gitignore +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/LICENSE +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/NOTICE +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/agents/.gitkeep +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/commands/.gitkeep +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/backend/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/backend/adapters/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/backend/adapters/litellm.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/backend/creation.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/backend/registry.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/auth.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/backend.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/claude.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/config_cmd.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/extensions.py +3 -3
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/gc.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/guard.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/guards.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/handoff.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/hooks/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/hooks/_group.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/hooks/_helpers.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/hooks/commands.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/hooks/direct_commands.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/hooks/install.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/hooks/policy.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/hooks/read_hygiene.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/hooks/verification.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/logs.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/proxy.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/proxy_costs.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/search.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/session.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/session_addendum.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/session_handoff.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/session_manage.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/status_line.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/cli/workflow.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/dataclass_utils.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/backends/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/backends/litellm.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/litellm-anthropic-local.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/litellm-anthropic.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/litellm-gemini-flash-local.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/litellm-gemini-local.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/litellm-gemini-test.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/litellm-gemini.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/litellm-openai-codex-local.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/litellm-openai-local.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/litellm-openai.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/openrouter-anthropic.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/openrouter-deepseek.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/openrouter-gemini-flash.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/openrouter-gemini.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/openrouter-glm.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/openrouter-kimi.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/openrouter-minimax.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/openrouter-openai-codex.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/openrouter-openai.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/defaults/templates/openrouter-qwen.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/config/schema.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/auth/credentials_file.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/auth/protocols.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/auth/secrets.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/data/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/data/pricing.yaml +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/data/system_prompt_addendums/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/data/system_prompt_addendums/gemini.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/data/system_prompt_addendums/openai.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/llm/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/llm/clients/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/llm/clients/base.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/llm/clients/openai_compat.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/llm/credentials.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/llm/detection.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/llm/errors.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/llm/protocols.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/llm/types.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/logging.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/models/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/models/catalog.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/models/pricing.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/models/types.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/naming.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/ops/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/ops/context.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/ops/gc.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/ops/proxy.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/ops/resolution.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/ops/session.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/ops/session_context.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/paths.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/process.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/reactive/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/reactive/cost_tracking.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/reactive/env.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/reactive/proxy.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/reactive/routing.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/reactive/structured_output.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/reactive/tagger.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/reactive/throttle.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/state/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/state/exceptions.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/state/io.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/state/lock.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/state/timestamps.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/transcript.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/typing_helpers.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/workqueue/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/workqueue/queue.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/core/workqueue/types.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/deterministic/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/deterministic/base.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/deterministic/coding_standards.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/deterministic/registry.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/deterministic/tdd.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/engine.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/protocols.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/queries.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/semantic/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/semantic/promotion.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/semantic/verdict.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/store.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/team/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/team/config.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/team/handlers.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/team/prompts.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/types.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/workflow/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/workflow/branches.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/workflow/config.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/workflow/divergence.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/workflow/policy.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/guard/workflow/stages.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/install/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/install/cli.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/install/exceptions.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/install/hooks.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/install/installer.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/install/models.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/install/preset.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/install/settings_merge.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/install/tracking.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/install/version.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/base_client.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/client_adapter.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/client_factory.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/converters.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/cost_logger.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/cost_tracker.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/data_models.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/error_hints.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/metrics.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/model_spec.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/proxies.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/proxy_identity.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/proxy/proxy_startup.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/adversarial.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/consensus.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/models.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/resources/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/resources/codereview-performance.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/resources/codereview-quick.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/resources/codereview-security.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/resources/codereview.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/resources/docreview-quick.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/resources/docreview.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/resources/thinkdeep.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/routing.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/review/synthesis.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/runtime_config.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/search/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/search/bm25_store.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/search/content_store.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/search/engine.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/search/exceptions.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/search/extractor.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/search/index_state.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/search/store.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/search/tokenizer.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/active.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/artifacts.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/claude/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/claude/cleanup.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/claude/invoke.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/claude/paths.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/cleanup.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/config.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/direct_model.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/effective.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/handoff.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/hooks/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/hooks/models.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/hooks/session_start.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/identity.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/index.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/models.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/plan_resolution.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/prev_sessions.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/store.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/worktree/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/worktree/cleanup.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/worktree/config_copy.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/session/worktree/create.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/sidecar/__init__.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/sidecar/container.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/forge/sidecar/docker.py +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/analyze/SKILL.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/challenge/SKILL.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/consensus/SKILL.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/consensus/resources/code_consensus_evaluation.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/consensus/resources/consensus_evaluation.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/consensus/resources/synthesis.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/debate/SKILL.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/debate/resources/code_debate_evaluation.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/debate/resources/debate_evaluation.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/panel/SKILL.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/panel/resources/synthesis.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/SKILL.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/0-enable.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/1-preflight.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/10-resume.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/11-config.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/12-search.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/13-guard.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/14-workflow.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/15-skills.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/17-info.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/18-disable.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/19-uninstall.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/2-extensions.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/20-cleanup.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/3-auth.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/4-proxy.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/5-session.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/6-hooks.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/7-costs.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/8-status-line.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist/9-direct-commands.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/checklist.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/resources/report-template.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/qa/scripts/start-container.sh +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review/SKILL.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review/references/claude-4.6.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review/references/claude-4.7.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review/references/gemini-3.1.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review/references/gpt-5.5.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review/references/skills-writing-guide.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review/resources/code-anthropic.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review/resources/code-gemini.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review/resources/code-openai.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review/resources/code.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review-docs/SKILL.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review-docs/resources/docs-anthropic.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review-docs/resources/docs-gemini.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review-docs/resources/docs-openai.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/review-docs/resources/docs.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/smoke-test/SKILL.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/smoke-test/scripts/smoke-test.sh +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/understand/SKILL.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/understand/resources/code-anthropic.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/understand/resources/code-gemini.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/understand/resources/code-openai.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/understand/resources/code.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/understand/resources/docs-anthropic.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/understand/resources/docs-gemini.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/understand/resources/docs-openai.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/understand/resources/docs.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/walkthrough/SKILL.md +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/walkthrough/scripts/run-in-repo.sh +0 -0
- {multi_forge-0.2.0 → multi_forge-0.2.1}/src/skills/walkthrough/scripts/setup-test-repo.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: multi-forge
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.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
|
|
@@ -24,15 +24,15 @@ Requires-Python: <3.14,>=3.11
|
|
|
24
24
|
Requires-Dist: click>=8.3.1
|
|
25
25
|
Requires-Dist: coolname<6,>=5.0.0
|
|
26
26
|
Requires-Dist: dacite>=1.8.0
|
|
27
|
-
Requires-Dist: fastapi>=0.115.
|
|
27
|
+
Requires-Dist: fastapi>=0.115.14
|
|
28
28
|
Requires-Dist: httpx>=0.25.0
|
|
29
|
-
Requires-Dist: litellm[proxy]>=1.
|
|
29
|
+
Requires-Dist: litellm[proxy]>=1.85.0
|
|
30
30
|
Requires-Dist: openai>=1.0.0
|
|
31
31
|
Requires-Dist: packaging>=21.0
|
|
32
32
|
Requires-Dist: pydantic>=2.0.0
|
|
33
33
|
Requires-Dist: python-dotenv>=1.2.2
|
|
34
34
|
Requires-Dist: pyyaml>=6.0.0
|
|
35
|
-
Requires-Dist: rich>=13.
|
|
35
|
+
Requires-Dist: rich>=13.9.0
|
|
36
36
|
Requires-Dist: ruamel-yaml>=0.18.0
|
|
37
37
|
Requires-Dist: tenacity>=8.0.0
|
|
38
38
|
Requires-Dist: uvicorn>=0.31.1
|
|
@@ -41,8 +41,9 @@ Description-Content-Type: text/markdown
|
|
|
41
41
|
|
|
42
42
|
# Multi-Forge
|
|
43
43
|
|
|
44
|
+
[](https://pypi.org/project/multi-forge/)
|
|
45
|
+
[](https://pypi.org/project/multi-forge/)
|
|
44
46
|
[](LICENSE)
|
|
45
|
-
[](https://github.com/hapa1i/multi-forge)
|
|
46
47
|
|
|
47
48
|
> [!WARNING]
|
|
48
49
|
> **Research Preview** -- Forge is under active development. APIs, commands, and file formats may change without notice
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# Multi-Forge
|
|
2
2
|
|
|
3
|
+
[](https://pypi.org/project/multi-forge/)
|
|
4
|
+
[](https://pypi.org/project/multi-forge/)
|
|
3
5
|
[](LICENSE)
|
|
4
|
-
[](https://github.com/hapa1i/multi-forge)
|
|
5
6
|
|
|
6
7
|
> [!WARNING]
|
|
7
8
|
> **Research Preview** -- Forge is under active development. APIs, commands, and file formats may change without notice
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "multi-forge"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.1"
|
|
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"
|
|
@@ -28,7 +28,7 @@ dependencies = [
|
|
|
28
28
|
"dacite>=1.8.0",
|
|
29
29
|
"click>=8.3.1",
|
|
30
30
|
"coolname>=5.0.0,<6",
|
|
31
|
-
"rich>=13.
|
|
31
|
+
"rich>=13.9.0",
|
|
32
32
|
"pydantic>=2.0.0",
|
|
33
33
|
"openai>=1.0.0",
|
|
34
34
|
"httpx>=0.25.0",
|
|
@@ -41,10 +41,10 @@ dependencies = [
|
|
|
41
41
|
# Plain `fastapi` (no `[standard]` extras): Forge uses none of websockets/
|
|
42
42
|
# uvloop/httptools/multipart/jinja2. `watchfiles` is declared explicitly
|
|
43
43
|
# because Forge owns `--reload` (`forge proxy server --reload`).
|
|
44
|
-
"fastapi>=0.115.
|
|
44
|
+
"fastapi>=0.115.14",
|
|
45
45
|
"uvicorn>=0.31.1",
|
|
46
46
|
"watchfiles>=0.20",
|
|
47
|
-
"litellm[proxy]>=1.
|
|
47
|
+
"litellm[proxy]>=1.85.0",
|
|
48
48
|
]
|
|
49
49
|
|
|
50
50
|
[project.scripts]
|
|
@@ -104,9 +104,12 @@ markers = [
|
|
|
104
104
|
asyncio_mode = "auto"
|
|
105
105
|
|
|
106
106
|
[tool.mypy]
|
|
107
|
-
#
|
|
107
|
+
# qa/ ships a copy of walkthrough-state.py generated from the walkthrough/ copy
|
|
108
|
+
# by scripts/sync-walkthrough-state.py (pre-commit) and verified by
|
|
109
|
+
# test_walkthrough_state_sync.py. Exclude it to avoid a duplicate-module
|
|
110
|
+
# collision; the walkthrough/ copy is the one type-checked.
|
|
108
111
|
exclude = [
|
|
109
|
-
|
|
112
|
+
'src/skills/qa/scripts/walkthrough-state\.py$',
|
|
110
113
|
]
|
|
111
114
|
ignore_missing_imports = true
|
|
112
115
|
|
|
@@ -137,18 +140,19 @@ dev = [
|
|
|
137
140
|
"pytest-cov>=4.1.0",
|
|
138
141
|
"pytest-asyncio>=0.23.0",
|
|
139
142
|
"pytest-mock>=3.15.1",
|
|
140
|
-
"ruff>=0.
|
|
143
|
+
"ruff>=0.15.0",
|
|
144
|
+
"black>=26.5.0",
|
|
141
145
|
"mypy>=1.13.0",
|
|
142
146
|
"pyright>=1.1.0",
|
|
143
147
|
"pytest-rerunfailures>=14.0",
|
|
144
|
-
"pre-commit>=4.
|
|
148
|
+
"pre-commit>=4.5.0",
|
|
145
149
|
"types-PyYAML>=6.0.0",
|
|
146
150
|
"types-requests>=2.31.0",
|
|
147
151
|
"python-dotenv>=1.2.1",
|
|
148
152
|
]
|
|
149
153
|
provider-check = [
|
|
150
|
-
"anthropic>=0.
|
|
151
|
-
"google-genai>=2.
|
|
152
|
-
"openai>=
|
|
154
|
+
"anthropic>=0.100.0",
|
|
155
|
+
"google-genai>=2.5.0",
|
|
156
|
+
"openai>=2.0.0",
|
|
153
157
|
"tiktoken>=0.12.0",
|
|
154
158
|
]
|
|
@@ -25,6 +25,7 @@ from .extensions import extensions # noqa: E402
|
|
|
25
25
|
from .guard import guard # noqa: E402
|
|
26
26
|
from .handoff import handoff # noqa: E402
|
|
27
27
|
from .hooks import hooks # noqa: E402
|
|
28
|
+
from .memory import memory as memory_cmd # noqa: E402
|
|
28
29
|
from .proxy import proxy # noqa: E402
|
|
29
30
|
from .search import search_cmd # noqa: E402
|
|
30
31
|
from .session import session # noqa: E402
|
|
@@ -46,12 +47,14 @@ _ALIASES: dict[str, str] = {
|
|
|
46
47
|
"ext": "extension",
|
|
47
48
|
"extensions": "extension", # backward compat (renamed from plural)
|
|
48
49
|
"sess": "session",
|
|
50
|
+
"mem": "memory",
|
|
49
51
|
}
|
|
50
52
|
# Display aliases: canonical -> preferred short alias (shown in help)
|
|
51
53
|
_DISPLAY_ALIASES: dict[str, str] = {
|
|
52
54
|
"authentication": "auth",
|
|
53
55
|
"extension": "ext",
|
|
54
56
|
"session": "sess",
|
|
57
|
+
"memory": "mem",
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
|
|
@@ -275,6 +278,7 @@ main.add_command(handoff)
|
|
|
275
278
|
main.add_command(claude)
|
|
276
279
|
main.add_command(config_cmd, name="config")
|
|
277
280
|
main.add_command(hooks)
|
|
281
|
+
main.add_command(memory_cmd, name="memory")
|
|
278
282
|
main.add_command(extensions, name="extension")
|
|
279
283
|
main.add_command(status_line)
|
|
280
284
|
main.add_command(info_cmd, name="info")
|