forgeoptimizer 1.0.1__tar.gz → 1.0.2__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.1 → forgeoptimizer-1.0.2}/PKG-INFO +1 -1
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/build/patch_generator.py +9 -6
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/cli/commands_diagnostics.py +10 -13
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/cli/daemon.py +12 -11
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/docs/generator.py +9 -11
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/orchestrator/__init__.py +9 -12
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/analyzer.py +14 -13
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime/shared_extraction.py +22 -24
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/utils/fs.py +10 -18
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/pyproject.toml +1 -1
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/uv.lock +1 -1
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/.github/workflows/ci.yml +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/.gitignore +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/CHANGELOG.md +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/CONTRIBUTING.md +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/CREDITS.md +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/Forge.toml +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/LICENSE +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/MIGRATION.md +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/README.md +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/RELEASE_NOTES.md +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/SECURITY.md +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/SUPPORT.md +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/docs/commands.md +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/budget/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/budget/middleware.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/budget/planner.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/budget/window.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/build/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/build/apply.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/build/caveman_optimize.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/build/diff_extract.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/build/llm.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/build/optimize.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/build/pipeline.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/build/retrieval.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/build/summarize.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/build/test_run.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/builder/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/builder/builder.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/builder/editor.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/builder/formatter.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/cli/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/cli/bootstrap.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/cli/commands_auth.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/cli/commands_commit.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/cli/commands_graph.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/cli/commands_inspect.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/cli/commands_wrappers.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/cli/daemon_utils.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/cli/main.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/cli/ui.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/config/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/config/loader.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/config/settings.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/config/writer.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/conversation/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/conversation/manager.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/conversation/session.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/core/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/core/container.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/core/context.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/core/credentials.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/core/errors.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/core/events.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/core/logging.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/core/models.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/core/plugins.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/core/service.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/docs/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/context.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/defaults.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/events.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/execution.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/plugins.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/runner.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/stages/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/stages/caveman_optimizer.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/stages/context_optimizer.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/stages/execution_engine_stage.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/stages/git_engine.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/stages/intent_analyzer.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/stages/model_router.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/stages/planning_engine.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/stages/repository_analyzer.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/engine/stages/validation_engine.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/git/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/git/repo.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/git/service.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/graph/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/graph/backend_forgegraph.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/graph/edge.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/graph/forgegraph.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/graph/graph.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/graph/indexer.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/graph/node.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/graph/repository.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/memory/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/memory/cache.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/memory/caching_middleware.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/memory/history.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/memory/memory_compression.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/memory/middleware.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/memory/store.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/base.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/builder.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/caveman_adapter.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/context.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/decorators.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/defaults.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/exceptions.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/executor.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/graphify_adapter.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/middleware_manager.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/pipeline.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/ponytail_adapter.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/registration.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/request.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/middleware/response.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/negotiator/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/negotiator/middleware.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/negotiator/negotiator.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/observability/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/observability/health.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/observability/metrics.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/observability/middleware.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/observability/tracing.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/adaptive_budget.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/ast_extractor.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/cache.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/caveman/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/caveman/cli.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/caveman/decorator.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/caveman/factory.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/caveman/ruleset.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/caveman/state.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/chunker.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/comment_stripper.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/compression.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/cost_estimator.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/embedding_cache.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/git_context.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/intelligent_retrieval.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/optimizer.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/orchestrator.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/output/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/output/optimizer.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/ponytail/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/ponytail/cli.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/ponytail/decorator.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/ponytail/factory.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/ponytail/ruleset.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/ponytail/state.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/prompt_optimizer.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/quality_validation.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/ranker.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/retrieval_cache.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/semantic_ranking.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/summarizer.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/optimizer/token_estimator.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/planner/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/planner/agent.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/planner/plan.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/planner/planner.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/planner/render.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/planner/serialize.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/planner/software.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/platform/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/platform/core.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/platform/deps.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/platform/paths.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/platform/shell.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/platform/update.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/plugins/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/plugins/hook.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/policy/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/policy/engine.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/policy/exceptions.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/policy/middleware.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/policy/rules.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/prompts/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/prompts/loader.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/prompts/registry.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/prompts/renderer.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/anthropic.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/base.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/builtin.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/conversation.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/exceptions.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/google.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/health.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/http_base.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/mock.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/openai.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/openai_compatible.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/provider_capabilities.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/provider_context.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/provider_events.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/provider_factory.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/provider_manager.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/provider_metadata.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/provider_registry.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/provider_router.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/router.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/providers/router_state.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/registry/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/registry/model_registry.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/resilience/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/resilience/circuit_breaker.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/resilience/exceptions.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/resilience/middleware.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/resilience/retry.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/architecture.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/complexity.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/dead_code.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/duplicates.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/performance.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/security.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/finding.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/report.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/repository.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/review/suggestions.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime/agents.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime/cache_store.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime/mcp_config.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime/pipeline_runner.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime/prepare.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime/wrappers.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/config_manager.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/container.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/context.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/errors.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/events.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/factory.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/interfaces.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/lifecycle.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/provider_registry.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/request.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/response.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/runtime_core/service_registry.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/scheduler/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/scheduler/scheduler.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/scheduler/task.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/scheduler/worker.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/streaming/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/streaming/events.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/streaming/middleware.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/templates/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/templates/engine.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/templates/registry.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/transport/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/transport/daemon.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/transport/http_server.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/transport/server.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/utils/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/utils/ids.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/utils/io.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/utils/paths.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/forgecli/utils/timing.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/packaging/scoop/forgecli.json +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/packaging/winget/forgecli.ForgeCli.yaml +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/__init__.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/conftest.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_auth.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_budget_context.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_build_pipeline.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_caching_observability.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_caveman_cli.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_caveman_ruleset.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_cli.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_commit.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_config.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_container.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_conversation_optimization.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_diagnostics.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_e2e.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_engine.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_forgegraph_client.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_graph.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_mcp_config.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_memory.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_middleware.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_negotiator.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_optimizer.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_orchestrator.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_output_optimization.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_planner.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_planner_render.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_platform.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_policy.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_ponytail_cli.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_ponytail_ruleset.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_prompts.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_provider.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_providers.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_providers_http.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_redesign_optimizers.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_repository_graph.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_resilience.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_review.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_router.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_runtime.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_runtime_core.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_runtime_core_phase2.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_scheduler_plugins.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_software_planner.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_streaming.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_token_optimizations.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/tests/test_transport.py +0 -0
- {forgeoptimizer-1.0.1 → forgeoptimizer-1.0.2}/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.2
|
|
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
|
|
@@ -97,13 +97,16 @@ class PatchGenerator:
|
|
|
97
97
|
return path
|
|
98
98
|
|
|
99
99
|
# Fallback: scan root files for a filename match if only a base name was extracted
|
|
100
|
+
import os
|
|
101
|
+
skip_dirs = {".git", ".venv", "node_modules", "dist", "build", ".forge"}
|
|
100
102
|
for candidate in candidates:
|
|
101
103
|
base_name = Path(candidate).name
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
try:
|
|
105
|
+
for dirpath, dirnames, filenames in os.walk(root, topdown=True):
|
|
106
|
+
dirnames[:] = [d for d in dirnames if not (d.startswith(".") or d in skip_dirs)]
|
|
107
|
+
if base_name in filenames:
|
|
108
|
+
return Path(dirpath) / base_name
|
|
109
|
+
except OSError:
|
|
110
|
+
pass
|
|
108
111
|
|
|
109
112
|
return None
|
|
@@ -167,27 +167,24 @@ def stats_cmd() -> None:
|
|
|
167
167
|
|
|
168
168
|
|
|
169
169
|
try:
|
|
170
|
-
|
|
171
170
|
repo_root = resolve_repo_root(Path.cwd())
|
|
172
|
-
|
|
173
|
-
py_files = list(repo_root.rglob("*.py"))
|
|
174
|
-
|
|
175
|
-
all_files = list(repo_root.rglob("*"))
|
|
176
|
-
|
|
177
171
|
skip = {".git", ".venv", "node_modules", "__pycache__", "dist", "build", ".forge", "forgegraph-out"}
|
|
178
|
-
|
|
179
|
-
trackable = [
|
|
172
|
+
py_files = []
|
|
173
|
+
trackable = []
|
|
174
|
+
for dirpath, dirnames, filenames in os.walk(repo_root, topdown=True):
|
|
175
|
+
dirnames[:] = [d for d in dirnames if not (d.startswith(".") or d in skip)]
|
|
176
|
+
for filename in filenames:
|
|
177
|
+
if not filename.startswith("."):
|
|
178
|
+
p = Path(dirpath) / filename
|
|
179
|
+
trackable.append(p)
|
|
180
|
+
if filename.endswith(".py"):
|
|
181
|
+
py_files.append(p)
|
|
180
182
|
|
|
181
183
|
console.print()
|
|
182
|
-
|
|
183
184
|
console.print(f" Repository : {repo_root.name}")
|
|
184
|
-
|
|
185
185
|
console.print(f" Python files : {len(py_files)}")
|
|
186
|
-
|
|
187
186
|
console.print(f" Total trackable : {len(trackable)}")
|
|
188
|
-
|
|
189
187
|
except Exception:
|
|
190
|
-
|
|
191
188
|
pass
|
|
192
189
|
|
|
193
190
|
|
|
@@ -114,27 +114,28 @@ watchers_lock = threading.Lock()
|
|
|
114
114
|
|
|
115
115
|
def get_recursive_fingerprint(root: Path) -> str:
|
|
116
116
|
"""Compute a signature of the repository based on file paths, modification times, and sizes."""
|
|
117
|
-
from forgecli.runtime.shared_extraction import
|
|
117
|
+
from forgecli.runtime.shared_extraction import _SKIP_DIRS
|
|
118
118
|
|
|
119
119
|
sig = hashlib.sha256()
|
|
120
120
|
sig.update(str(root.resolve()).encode("utf-8"))
|
|
121
121
|
|
|
122
122
|
try:
|
|
123
|
-
|
|
123
|
+
paths = []
|
|
124
|
+
for dirpath, dirnames, filenames in os.walk(root, topdown=True):
|
|
125
|
+
dirnames[:] = [d for d in dirnames if not (d.startswith(".") or d in _SKIP_DIRS)]
|
|
126
|
+
for filename in filenames:
|
|
127
|
+
if not filename.startswith("."):
|
|
128
|
+
paths.append(Path(dirpath) / filename)
|
|
129
|
+
paths.sort(key=lambda p: str(p))
|
|
130
|
+
for path in paths:
|
|
124
131
|
try:
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if path.is_file() and not path.name.startswith("."):
|
|
129
|
-
stat = path.stat()
|
|
130
|
-
sig.update(f"{path.name}:{stat.st_mtime}:{stat.st_size}".encode())
|
|
131
|
-
except (ValueError, OSError):
|
|
132
|
+
stat = path.stat()
|
|
133
|
+
sig.update(f"{path.name}:{stat.st_mtime}:{stat.st_size}".encode())
|
|
134
|
+
except OSError:
|
|
132
135
|
continue
|
|
133
136
|
except OSError:
|
|
134
137
|
pass
|
|
135
138
|
|
|
136
|
-
|
|
137
|
-
|
|
138
139
|
return sig.hexdigest()[:24]
|
|
139
140
|
|
|
140
141
|
|
|
@@ -108,17 +108,15 @@ def _walk_nodes(root: Path) -> list[dict[str, object]]:
|
|
|
108
108
|
"""
|
|
109
109
|
|
|
110
110
|
nodes: list[dict[str, object]] = []
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
continue
|
|
121
|
-
|
|
111
|
+
import os
|
|
112
|
+
skip = {"__pycache__", "node_modules", ".venv", "venv"}
|
|
113
|
+
py_paths = []
|
|
114
|
+
for dirpath, dirnames, filenames in os.walk(root, topdown=True):
|
|
115
|
+
dirnames[:] = [d for d in dirnames if not (d.startswith(".") or d in skip)]
|
|
116
|
+
for filename in filenames:
|
|
117
|
+
if filename.endswith(".py") and not filename.startswith("."):
|
|
118
|
+
py_paths.append(Path(dirpath) / filename)
|
|
119
|
+
for path in sorted(py_paths):
|
|
122
120
|
rel = path.relative_to(root)
|
|
123
121
|
|
|
124
122
|
try:
|
|
@@ -955,19 +955,16 @@ class DocsWorkflow(Workflow):
|
|
|
955
955
|
|
|
956
956
|
|
|
957
957
|
root = context.app_context.cwd
|
|
958
|
-
|
|
959
958
|
files_info = []
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
continue
|
|
970
|
-
|
|
959
|
+
import os
|
|
960
|
+
skip = {"__pycache__", "node_modules", ".venv", "venv"}
|
|
961
|
+
py_paths = []
|
|
962
|
+
for dirpath, dirnames, filenames in os.walk(root, topdown=True):
|
|
963
|
+
dirnames[:] = [d for d in dirnames if not (d.startswith(".") or d in skip)]
|
|
964
|
+
for filename in filenames:
|
|
965
|
+
if filename.endswith(".py") and not filename.startswith("."):
|
|
966
|
+
py_paths.append(Path(dirpath) / filename)
|
|
967
|
+
for path in sorted(py_paths):
|
|
971
968
|
files_info.append(str(path.relative_to(root)))
|
|
972
969
|
|
|
973
970
|
|
|
@@ -162,20 +162,21 @@ class AnalysisContext:
|
|
|
162
162
|
|
|
163
163
|
return cls(root=root, files=files)
|
|
164
164
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
165
|
+
import os
|
|
166
|
+
paths = []
|
|
167
|
+
try:
|
|
168
|
+
for dirpath, dirnames, filenames in os.walk(root, topdown=True):
|
|
169
|
+
dirnames[:] = [d for d in dirnames if not (d.startswith(".") or d in ignore_set)]
|
|
170
|
+
for filename in filenames:
|
|
171
|
+
if filename in ignore_set:
|
|
172
|
+
continue
|
|
173
|
+
p = Path(dirpath) / filename
|
|
174
|
+
if p.suffix.lower() in extensions:
|
|
175
|
+
paths.append(p)
|
|
176
|
+
except OSError:
|
|
177
|
+
pass
|
|
178
178
|
|
|
179
|
+
for path in sorted(paths):
|
|
179
180
|
files.append(SourceFile.load(path))
|
|
180
181
|
|
|
181
182
|
return cls(root=root, files=files)
|
|
@@ -6,6 +6,7 @@ All other implementations (middleware defaults, inline daemon parsers) must dele
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
+
import os
|
|
9
10
|
import re
|
|
10
11
|
from collections.abc import Iterable
|
|
11
12
|
from concurrent.futures import ThreadPoolExecutor
|
|
@@ -40,15 +41,11 @@ def should_skip(parts: tuple[str, ...]) -> bool:
|
|
|
40
41
|
def iter_trackable_files(root: Path) -> Iterable[Path]:
|
|
41
42
|
root = root.resolve()
|
|
42
43
|
try:
|
|
43
|
-
for
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if
|
|
47
|
-
|
|
48
|
-
if p.is_file() and not p.name.startswith("."):
|
|
49
|
-
yield p
|
|
50
|
-
except (ValueError, OSError):
|
|
51
|
-
continue
|
|
44
|
+
for dirpath, dirnames, filenames in os.walk(root, topdown=True):
|
|
45
|
+
dirnames[:] = [d for d in dirnames if not (d.startswith(".") or d in _SKIP_DIRS)]
|
|
46
|
+
for filename in filenames:
|
|
47
|
+
if not filename.startswith("."):
|
|
48
|
+
yield Path(dirpath) / filename
|
|
52
49
|
except OSError:
|
|
53
50
|
return
|
|
54
51
|
|
|
@@ -134,23 +131,24 @@ def extract_files(root: Path) -> list[dict[str, Any]]:
|
|
|
134
131
|
root = root.resolve()
|
|
135
132
|
files: list[dict[str, Any]] = []
|
|
136
133
|
try:
|
|
137
|
-
for
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
134
|
+
for dirpath, dirnames, filenames in os.walk(root, topdown=True):
|
|
135
|
+
dirnames[:] = [d for d in dirnames if not (d.startswith(".") or d in _SKIP_DIRS)]
|
|
136
|
+
for filename in filenames:
|
|
137
|
+
if not filename.startswith("."):
|
|
138
|
+
p = Path(dirpath) / filename
|
|
139
|
+
try:
|
|
140
|
+
stat = p.stat()
|
|
141
|
+
files.append({
|
|
142
|
+
"name": filename,
|
|
143
|
+
"path": str(p.relative_to(root)),
|
|
144
|
+
"size_bytes": stat.st_size,
|
|
145
|
+
"mtime": stat.st_mtime,
|
|
146
|
+
})
|
|
147
|
+
except OSError:
|
|
148
|
+
continue
|
|
152
149
|
except OSError:
|
|
153
150
|
pass
|
|
151
|
+
files.sort(key=lambda x: x["path"])
|
|
154
152
|
return files
|
|
155
153
|
|
|
156
154
|
|
|
@@ -208,26 +208,18 @@ def has_supported_source_files(path: Path) -> bool:
|
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
if not path.exists() or not path.is_dir():
|
|
211
|
-
|
|
212
211
|
return False
|
|
213
212
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
if p.is_file() and not p.name.startswith(".") and p.suffix.lower() in supported_exts:
|
|
225
|
-
|
|
226
|
-
return True
|
|
227
|
-
|
|
228
|
-
except ValueError:
|
|
229
|
-
|
|
230
|
-
continue
|
|
213
|
+
try:
|
|
214
|
+
for _, dirnames, filenames in os.walk(path, topdown=True):
|
|
215
|
+
dirnames[:] = [d for d in dirnames if not (d.startswith(".") or d in ignored_dirs)]
|
|
216
|
+
for filename in filenames:
|
|
217
|
+
if not filename.startswith("."):
|
|
218
|
+
suffix = Path(filename).suffix.lower()
|
|
219
|
+
if suffix in supported_exts:
|
|
220
|
+
return True
|
|
221
|
+
except OSError:
|
|
222
|
+
pass
|
|
231
223
|
|
|
232
224
|
return False
|
|
233
225
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.1 → forgeoptimizer-1.0.2}/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
|