forgeoptimizer 1.0.2__tar.gz → 1.0.3__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.3}/PKG-INFO +18 -1
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/README.md +17 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime/mcp_config.py +5 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/pyproject.toml +1 -1
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/uv.lock +1 -1
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/.github/workflows/ci.yml +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/.gitignore +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/CHANGELOG.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/CONTRIBUTING.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/CREDITS.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/Forge.toml +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/LICENSE +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/MIGRATION.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/RELEASE_NOTES.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/SECURITY.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/SUPPORT.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/docs/commands.md +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/budget/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/budget/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/budget/planner.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/budget/window.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/build/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/build/apply.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/build/caveman_optimize.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/build/diff_extract.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/build/llm.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/build/optimize.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/build/patch_generator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/build/pipeline.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/build/retrieval.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/build/summarize.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/build/test_run.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/builder/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/builder/builder.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/builder/editor.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/builder/formatter.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/cli/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/cli/bootstrap.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/cli/commands_auth.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/cli/commands_commit.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/cli/commands_diagnostics.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/cli/commands_graph.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/cli/commands_inspect.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/cli/commands_wrappers.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/cli/daemon.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/cli/daemon_utils.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/cli/main.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/cli/ui.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/config/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/config/loader.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/config/settings.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/config/writer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/conversation/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/conversation/manager.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/conversation/session.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/core/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/core/container.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/core/context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/core/credentials.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/core/errors.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/core/events.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/core/logging.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/core/models.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/core/plugins.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/core/service.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/docs/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/docs/generator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/defaults.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/events.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/execution.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/plugins.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/runner.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/stages/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/stages/caveman_optimizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/stages/context_optimizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/stages/execution_engine_stage.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/stages/git_engine.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/stages/intent_analyzer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/stages/model_router.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/stages/planning_engine.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/stages/repository_analyzer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/engine/stages/validation_engine.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/git/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/git/repo.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/git/service.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/graph/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/graph/backend_forgegraph.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/graph/edge.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/graph/forgegraph.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/graph/graph.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/graph/indexer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/graph/node.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/graph/repository.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/memory/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/memory/cache.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/memory/caching_middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/memory/history.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/memory/memory_compression.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/memory/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/memory/store.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/base.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/builder.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/caveman_adapter.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/decorators.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/defaults.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/exceptions.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/executor.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/graphify_adapter.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/middleware_manager.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/pipeline.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/ponytail_adapter.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/registration.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/request.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/middleware/response.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/negotiator/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/negotiator/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/negotiator/negotiator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/observability/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/observability/health.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/observability/metrics.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/observability/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/observability/tracing.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/adaptive_budget.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/ast_extractor.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/cache.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/caveman/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/caveman/cli.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/caveman/decorator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/caveman/factory.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/caveman/ruleset.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/caveman/state.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/chunker.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/comment_stripper.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/compression.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/cost_estimator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/embedding_cache.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/git_context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/intelligent_retrieval.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/optimizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/orchestrator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/output/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/output/optimizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/ponytail/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/ponytail/cli.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/ponytail/decorator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/ponytail/factory.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/ponytail/ruleset.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/ponytail/state.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/prompt_optimizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/quality_validation.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/ranker.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/retrieval_cache.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/semantic_ranking.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/summarizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/optimizer/token_estimator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/orchestrator/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/planner/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/planner/agent.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/planner/plan.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/planner/planner.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/planner/render.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/planner/serialize.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/planner/software.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/platform/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/platform/core.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/platform/deps.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/platform/paths.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/platform/shell.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/platform/update.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/plugins/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/plugins/hook.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/policy/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/policy/engine.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/policy/exceptions.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/policy/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/policy/rules.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/prompts/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/prompts/loader.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/prompts/registry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/prompts/renderer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/anthropic.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/base.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/builtin.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/conversation.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/exceptions.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/google.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/health.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/http_base.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/mock.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/openai.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/openai_compatible.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/provider_capabilities.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/provider_context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/provider_events.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/provider_factory.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/provider_manager.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/provider_metadata.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/provider_registry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/provider_router.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/router.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/providers/router_state.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/registry/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/registry/model_registry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/resilience/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/resilience/circuit_breaker.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/resilience/exceptions.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/resilience/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/resilience/retry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/analyzer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/analyzers/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/analyzers/architecture.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/analyzers/complexity.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/analyzers/dead_code.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/analyzers/duplicates.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/analyzers/performance.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/analyzers/security.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/finding.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/report.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/repository.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/review/suggestions.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime/agents.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime/cache_store.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime/pipeline_runner.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime/prepare.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime/shared_extraction.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime/wrappers.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/config_manager.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/container.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/errors.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/events.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/factory.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/interfaces.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/lifecycle.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/provider_registry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/request.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/response.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/runtime_core/service_registry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/scheduler/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/scheduler/scheduler.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/scheduler/task.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/scheduler/worker.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/streaming/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/streaming/events.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/streaming/middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/templates/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/templates/engine.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/templates/registry.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/transport/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/transport/daemon.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/transport/http_server.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/transport/server.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/utils/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/utils/fs.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/utils/ids.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/utils/io.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/utils/paths.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/forgecli/utils/timing.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/packaging/scoop/forgecli.json +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/packaging/winget/forgecli.ForgeCli.yaml +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/__init__.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/conftest.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_auth.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_budget_context.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_build_pipeline.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_caching_observability.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_caveman_cli.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_caveman_ruleset.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_cli.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_commit.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_config.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_container.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_conversation_optimization.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_diagnostics.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_e2e.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_engine.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_forgegraph_client.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_graph.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_mcp_config.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_memory.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_middleware.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_negotiator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_optimizer.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_orchestrator.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_output_optimization.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_planner.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_planner_render.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_platform.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_policy.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_ponytail_cli.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_ponytail_ruleset.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_prompts.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_provider.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_providers.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_providers_http.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_redesign_optimizers.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_repository_graph.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_resilience.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_review.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_router.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_runtime.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_runtime_core.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_runtime_core_phase2.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_scheduler_plugins.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_software_planner.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_streaming.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_token_optimizations.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/tests/test_transport.py +0 -0
- {forgeoptimizer-1.0.2 → forgeoptimizer-1.0.3}/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.3
|
|
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
|
|
@@ -379,6 +379,11 @@ def configure_project_local_mcp(repo_root: Path) -> None:
|
|
|
379
379
|
|
|
380
380
|
"""Create a project-local .mcp.json for tools that support auto-discovery."""
|
|
381
381
|
|
|
382
|
+
# Never create a project-local .mcp.json in the user's home or system root directory
|
|
383
|
+
resolved = repo_root.resolve()
|
|
384
|
+
if resolved == Path.home().resolve() or resolved == Path("/").resolve():
|
|
385
|
+
return
|
|
386
|
+
|
|
382
387
|
_write_json_mcp(repo_root / ".mcp.json", "mcpServers")
|
|
383
388
|
|
|
384
389
|
|
|
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.3}/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
|
|
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
|