forgeoptimizer 1.0.2__tar.gz → 1.0.4__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.
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/PKG-INFO +18 -1
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/README.md +17 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime/mcp_config.py +17 -1
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime/wrappers.py +6 -2
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/pyproject.toml +1 -1
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_cli.py +44 -2
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/uv.lock +1 -1
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/.github/workflows/ci.yml +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/.gitignore +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/CHANGELOG.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/CONTRIBUTING.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/CREDITS.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/Forge.toml +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/LICENSE +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/MIGRATION.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/RELEASE_NOTES.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/SECURITY.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/SUPPORT.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/docs/commands.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/budget/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/budget/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/budget/planner.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/budget/window.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/build/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/build/apply.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/build/caveman_optimize.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/build/diff_extract.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/build/llm.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/build/optimize.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/build/patch_generator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/build/pipeline.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/build/retrieval.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/build/summarize.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/build/test_run.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/builder/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/builder/builder.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/builder/editor.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/builder/formatter.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/cli/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/cli/bootstrap.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/cli/commands_auth.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/cli/commands_commit.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/cli/commands_diagnostics.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/cli/commands_graph.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/cli/commands_inspect.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/cli/commands_wrappers.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/cli/daemon.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/cli/daemon_utils.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/cli/main.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/cli/ui.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/config/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/config/loader.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/config/settings.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/config/writer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/conversation/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/conversation/manager.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/conversation/session.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/core/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/core/container.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/core/context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/core/credentials.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/core/errors.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/core/events.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/core/logging.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/core/models.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/core/plugins.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/core/service.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/docs/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/docs/generator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/defaults.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/events.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/execution.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/plugins.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/runner.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/stages/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/stages/caveman_optimizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/stages/context_optimizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/stages/execution_engine_stage.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/stages/git_engine.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/stages/intent_analyzer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/stages/model_router.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/stages/planning_engine.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/stages/repository_analyzer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/stages/validation_engine.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/git/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/git/repo.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/git/service.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/graph/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/graph/backend_forgegraph.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/graph/edge.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/graph/forgegraph.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/graph/graph.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/graph/indexer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/graph/node.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/graph/repository.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/memory/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/memory/cache.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/memory/caching_middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/memory/history.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/memory/memory_compression.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/memory/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/memory/store.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/base.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/builder.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/caveman_adapter.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/decorators.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/defaults.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/exceptions.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/executor.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/graphify_adapter.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/middleware_manager.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/pipeline.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/ponytail_adapter.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/registration.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/request.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/middleware/response.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/negotiator/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/negotiator/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/negotiator/negotiator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/observability/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/observability/health.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/observability/metrics.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/observability/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/observability/tracing.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/adaptive_budget.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/ast_extractor.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/cache.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/caveman/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/caveman/cli.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/caveman/decorator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/caveman/factory.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/caveman/ruleset.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/caveman/state.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/chunker.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/comment_stripper.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/compression.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/cost_estimator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/embedding_cache.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/git_context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/intelligent_retrieval.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/optimizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/orchestrator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/output/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/output/optimizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/ponytail/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/ponytail/cli.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/ponytail/decorator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/ponytail/factory.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/ponytail/ruleset.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/ponytail/state.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/prompt_optimizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/quality_validation.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/ranker.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/retrieval_cache.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/semantic_ranking.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/summarizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/optimizer/token_estimator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/orchestrator/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/planner/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/planner/agent.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/planner/plan.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/planner/planner.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/planner/render.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/planner/serialize.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/planner/software.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/platform/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/platform/core.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/platform/deps.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/platform/paths.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/platform/shell.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/platform/update.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/plugins/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/plugins/hook.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/policy/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/policy/engine.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/policy/exceptions.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/policy/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/policy/rules.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/prompts/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/prompts/loader.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/prompts/registry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/prompts/renderer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/anthropic.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/base.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/builtin.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/conversation.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/exceptions.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/google.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/health.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/http_base.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/mock.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/openai.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/openai_compatible.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/provider_capabilities.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/provider_context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/provider_events.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/provider_factory.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/provider_manager.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/provider_metadata.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/provider_registry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/provider_router.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/router.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/providers/router_state.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/registry/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/registry/model_registry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/resilience/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/resilience/circuit_breaker.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/resilience/exceptions.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/resilience/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/resilience/retry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/analyzer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/analyzers/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/analyzers/architecture.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/analyzers/complexity.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/analyzers/dead_code.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/analyzers/duplicates.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/analyzers/performance.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/analyzers/security.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/finding.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/report.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/repository.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/review/suggestions.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime/agents.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime/cache_store.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime/pipeline_runner.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime/prepare.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime/shared_extraction.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/config_manager.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/container.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/errors.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/events.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/factory.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/interfaces.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/lifecycle.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/provider_registry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/request.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/response.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/runtime_core/service_registry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/scheduler/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/scheduler/scheduler.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/scheduler/task.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/scheduler/worker.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/streaming/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/streaming/events.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/streaming/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/templates/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/templates/engine.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/templates/registry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/transport/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/transport/daemon.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/transport/http_server.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/transport/server.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/utils/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/utils/fs.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/utils/ids.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/utils/io.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/utils/paths.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/utils/timing.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/packaging/scoop/forgecli.json +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/packaging/winget/forgecli.ForgeCli.yaml +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/conftest.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_auth.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_budget_context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_build_pipeline.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_caching_observability.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_caveman_cli.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_caveman_ruleset.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_commit.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_config.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_container.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_conversation_optimization.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_diagnostics.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_e2e.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_engine.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_forgegraph_client.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_graph.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_mcp_config.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_memory.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_negotiator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_optimizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_orchestrator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_output_optimization.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_planner.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_planner_render.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_platform.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_policy.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_ponytail_cli.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_ponytail_ruleset.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_prompts.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_provider.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_providers.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_providers_http.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_redesign_optimizers.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_repository_graph.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_resilience.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_review.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_router.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_runtime.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_runtime_core.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_runtime_core_phase2.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_scheduler_plugins.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_software_planner.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_streaming.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_token_optimizations.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_transport.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/tests/test_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: forgeoptimizer
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.4
|
|
4
4
|
Summary: Forge — AI optimization runtime for Claude Code, Codex, Cursor, Antigravity
|
|
5
5
|
Project-URL: Homepage, https://github.com/mdshzb04/Forge
|
|
6
6
|
Project-URL: Repository, https://github.com/mdshzb04/Forge
|
|
@@ -118,6 +118,23 @@ uv tool install forgeoptimizer
|
|
|
118
118
|
|
|
119
119
|
The CLI entrypoint is `forge`.
|
|
120
120
|
|
|
121
|
+
To upgrade an existing installation to get the latest optimization fixes:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
uv tool upgrade forgeoptimizer
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Important Usage Guidelines
|
|
130
|
+
|
|
131
|
+
> [!IMPORTANT]
|
|
132
|
+
> **Always run commands inside your specific project directories.**
|
|
133
|
+
>
|
|
134
|
+
> Forge scans the files in your current working directory to build context.
|
|
135
|
+
> - **Do not run `forge` commands inside your home directory (`~`) or root (`/)`**, as this will cause Forge to scan all unrelated system/home directories and files, leading to long scans or freezes.
|
|
136
|
+
> - **Always `cd` into your specific project folder or Git repository** before running commands like `forge claude`, `forge cursor`, or `forge antigravity`.
|
|
137
|
+
|
|
121
138
|
---
|
|
122
139
|
|
|
123
140
|
## Interfaces
|
|
@@ -68,6 +68,23 @@ uv tool install forgeoptimizer
|
|
|
68
68
|
|
|
69
69
|
The CLI entrypoint is `forge`.
|
|
70
70
|
|
|
71
|
+
To upgrade an existing installation to get the latest optimization fixes:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
uv tool upgrade forgeoptimizer
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Important Usage Guidelines
|
|
80
|
+
|
|
81
|
+
> [!IMPORTANT]
|
|
82
|
+
> **Always run commands inside your specific project directories.**
|
|
83
|
+
>
|
|
84
|
+
> Forge scans the files in your current working directory to build context.
|
|
85
|
+
> - **Do not run `forge` commands inside your home directory (`~`) or root (`/)`**, as this will cause Forge to scan all unrelated system/home directories and files, leading to long scans or freezes.
|
|
86
|
+
> - **Always `cd` into your specific project folder or Git repository** before running commands like `forge claude`, `forge cursor`, or `forge antigravity`.
|
|
87
|
+
|
|
71
88
|
---
|
|
72
89
|
|
|
73
90
|
## Interfaces
|
|
@@ -98,6 +98,15 @@ def configure_mcp_for_agent(spec: AgentSpec, repo_root: Path) -> None:
|
|
|
98
98
|
|
|
99
99
|
_write_json_mcp(path, target.table)
|
|
100
100
|
|
|
101
|
+
except PermissionError as e:
|
|
102
|
+
|
|
103
|
+
# Quietly skip permission errors on project/workspace targets since home targets are configured
|
|
104
|
+
if target.base == "repo":
|
|
105
|
+
|
|
106
|
+
continue
|
|
107
|
+
|
|
108
|
+
info(f"Note: Could not auto-configure {target.label or spec.name} MCP: {e}")
|
|
109
|
+
|
|
101
110
|
except Exception as e:
|
|
102
111
|
|
|
103
112
|
info(f"Note: Could not auto-configure {target.label or spec.name} MCP: {e}")
|
|
@@ -379,7 +388,14 @@ def configure_project_local_mcp(repo_root: Path) -> None:
|
|
|
379
388
|
|
|
380
389
|
"""Create a project-local .mcp.json for tools that support auto-discovery."""
|
|
381
390
|
|
|
382
|
-
|
|
391
|
+
# Never create a project-local .mcp.json in the user's home or system root directory
|
|
392
|
+
resolved = repo_root.resolve()
|
|
393
|
+
if resolved == Path.home().resolve() or resolved == Path("/").resolve():
|
|
394
|
+
return
|
|
395
|
+
|
|
396
|
+
with contextlib.suppress(PermissionError):
|
|
397
|
+
|
|
398
|
+
_write_json_mcp(repo_root / ".mcp.json", "mcpServers")
|
|
383
399
|
|
|
384
400
|
|
|
385
401
|
|
|
@@ -78,8 +78,12 @@ def launch_wrapper(
|
|
|
78
78
|
|
|
79
79
|
if spec.supports_mcp:
|
|
80
80
|
try:
|
|
81
|
-
from forgecli.runtime.mcp_config import
|
|
82
|
-
|
|
81
|
+
from forgecli.runtime.mcp_config import (
|
|
82
|
+
configure_mcp_for_agent,
|
|
83
|
+
configure_project_local_mcp,
|
|
84
|
+
)
|
|
85
|
+
configure_mcp_for_agent(spec, repo_root)
|
|
86
|
+
configure_project_local_mcp(repo_root)
|
|
83
87
|
except Exception:
|
|
84
88
|
pass
|
|
85
89
|
|
|
@@ -486,6 +486,7 @@ def test_mcp_auto_configuration(tmp_path: Path, monkeypatch) -> None:
|
|
|
486
486
|
|
|
487
487
|
import subprocess
|
|
488
488
|
|
|
489
|
+
# 1. Test Claude Code MCP Configuration
|
|
489
490
|
with (
|
|
490
491
|
patch("forgecli.runtime.wrappers.which", return_value="/usr/bin/claude"),
|
|
491
492
|
patch(
|
|
@@ -507,7 +508,22 @@ def test_mcp_auto_configuration(tmp_path: Path, monkeypatch) -> None:
|
|
|
507
508
|
|
|
508
509
|
assert "forge" in claude_config.get("mcpServers", {})
|
|
509
510
|
|
|
510
|
-
|
|
511
|
+
# Verify other agents' configs are NOT created yet
|
|
512
|
+
assert not (mock_home / ".cursor" / "mcp.json").exists()
|
|
513
|
+
|
|
514
|
+
# 2. Test Cursor MCP Configuration
|
|
515
|
+
with (
|
|
516
|
+
patch("forgecli.runtime.wrappers.which", return_value="/usr/bin/cursor"),
|
|
517
|
+
patch(
|
|
518
|
+
"forgecli.runtime.wrappers.subprocess.run",
|
|
519
|
+
return_value=subprocess.CompletedProcess([], 0, stdout="", stderr=""),
|
|
520
|
+
),
|
|
521
|
+
):
|
|
522
|
+
runner = CliRunner()
|
|
523
|
+
|
|
524
|
+
result = runner.invoke(app, ["cursor", "-p", str(mock_repo)], catch_exceptions=False)
|
|
525
|
+
|
|
526
|
+
assert result.exit_code == 0
|
|
511
527
|
|
|
512
528
|
cursor_global_file = mock_home / ".cursor" / "mcp.json"
|
|
513
529
|
|
|
@@ -519,7 +535,19 @@ def test_mcp_auto_configuration(tmp_path: Path, monkeypatch) -> None:
|
|
|
519
535
|
|
|
520
536
|
assert (mock_repo / ".cursor" / "mcp.json").exists()
|
|
521
537
|
|
|
522
|
-
|
|
538
|
+
# 3. Test Codex MCP Configuration
|
|
539
|
+
with (
|
|
540
|
+
patch("forgecli.runtime.wrappers.which", return_value="/usr/bin/codex"),
|
|
541
|
+
patch(
|
|
542
|
+
"forgecli.runtime.wrappers.subprocess.run",
|
|
543
|
+
return_value=subprocess.CompletedProcess([], 0, stdout="", stderr=""),
|
|
544
|
+
),
|
|
545
|
+
):
|
|
546
|
+
runner = CliRunner()
|
|
547
|
+
|
|
548
|
+
result = runner.invoke(app, ["codex", "-p", str(mock_repo)], catch_exceptions=False)
|
|
549
|
+
|
|
550
|
+
assert result.exit_code == 0
|
|
523
551
|
|
|
524
552
|
codex_toml = mock_home / ".codex" / "config.toml"
|
|
525
553
|
|
|
@@ -527,6 +555,20 @@ def test_mcp_auto_configuration(tmp_path: Path, monkeypatch) -> None:
|
|
|
527
555
|
|
|
528
556
|
assert "[mcp_servers.forge]" in codex_toml.read_text(encoding="utf-8")
|
|
529
557
|
|
|
558
|
+
# 4. Test Antigravity MCP Configuration
|
|
559
|
+
with (
|
|
560
|
+
patch("forgecli.runtime.wrappers.which", return_value="/usr/bin/antigravity"),
|
|
561
|
+
patch(
|
|
562
|
+
"forgecli.runtime.wrappers.subprocess.run",
|
|
563
|
+
return_value=subprocess.CompletedProcess([], 0, stdout="", stderr=""),
|
|
564
|
+
),
|
|
565
|
+
):
|
|
566
|
+
runner = CliRunner()
|
|
567
|
+
|
|
568
|
+
result = runner.invoke(app, ["antigravity", "-p", str(mock_repo)], catch_exceptions=False)
|
|
569
|
+
|
|
570
|
+
assert result.exit_code == 0
|
|
571
|
+
|
|
530
572
|
antigravity_json = mock_home / ".gemini" / "config" / "mcp_config.json"
|
|
531
573
|
|
|
532
574
|
assert antigravity_json.exists()
|
|
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
|
{forgeoptimizer-1.0.2 → forgeoptimizer-1.0.4}/forgecli/engine/stages/execution_engine_stage.py
RENAMED
|
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
|