forgex-cli 0.1.1__tar.gz → 0.1.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.
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/PKG-INFO +1 -1
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/__init__.py +1 -1
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/repl.py +15 -18
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/.github/workflows/ci.yml +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/.github/workflows/release.yml +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/.gitignore +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/CHANGELOG.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/LICENSE +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/README.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/SECURITY.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/docs/agents.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/docs/architecture.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/docs/configuration.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/docs/decisions.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/docs/providers.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/docs/quickstart.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/docs/sandbox.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/docs/security.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/examples/demo-project/README.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/examples/demo-project/pyproject.toml +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/examples/demo-project/src/demo/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/examples/demo-project/src/demo/calc.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/examples/demo-project/tests/test_calc.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/pyproject.toml +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/__main__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/agents/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/agents/architect.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/agents/base.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/agents/builder.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/agents/ensemble.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/agents/expert_coder.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/agents/supervisor.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/app.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/build_views.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/build.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/checkpoint.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/config.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/context.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/diff.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/do_cmd.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/doctor.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/fix.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/init.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/logs.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/models.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/plan.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/review.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/rollback.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/run.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/status.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/supervise.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/task.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/tools.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/commands/verify.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/context_memory.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/intent.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/progress.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/runtime.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/session.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/cli/ui.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/config/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/config/loader.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/config/schema.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/context/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/context/chunker.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/context/dependency_graph.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/context/indexer.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/context/manager.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/context/retriever.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/models/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/models/base.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/models/capabilities.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/models/factory.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/models/groq.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/models/local.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/models/openai_compatible.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/models/registry.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/models/router.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/orchestration/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/orchestration/checkpoints.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/orchestration/engine.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/orchestration/events.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/orchestration/lockfile.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/orchestration/retry.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/orchestration/state.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/orchestration/stores.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/orchestration/workflow.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/project.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/prompts/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/prompts/architect.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/prompts/builder.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/prompts/expert_coder.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/prompts/reviewer.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/prompts/supervisor.md +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/research/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/research/citations.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/research/engine.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/research/sources.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/sandbox/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/sandbox/executor.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/sandbox/permissions.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/sandbox/policies.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/schemas/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/schemas/agent.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/schemas/checkpoint.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/schemas/error.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/schemas/event.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/schemas/plan.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/schemas/project.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/schemas/research.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/schemas/result.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/schemas/task.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/storage/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/storage/database.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/storage/migrations.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/storage/repositories.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/tools/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/tools/base.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/tools/dependencies.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/tools/filesystem.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/tools/git.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/tools/project.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/tools/search.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/tools/terminal.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/tools/testing.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/tools/verification.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/utils/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/utils/logging.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/utils/paths.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/src/forgex/utils/redact.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/conftest.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/__init__.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_agents_architect.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_builder_agent.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_checkpoints.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_cli.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_cli_build.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_cli_checkpoint.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_cli_do.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_cli_models.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_cli_plan.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_cli_review.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_cli_surface.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_cli_task.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_cli_tools.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_cli_verify.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_config.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_config_env.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_config_setup.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_context_agents.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_context_manager.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_context_memory.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_engine.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_ensemble.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_events.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_executor.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_expert_coder.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_fix.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_indexer.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_init.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_intent.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_large_repo.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_offline.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_packaging.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_paths.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_permissions.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_plan_schemas.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_policies.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_project.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_providers.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_recovery.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_redact.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_registry.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_repl.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_research.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_retriever.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_retry.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_router.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_run_cli.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_runtime.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_security.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_session.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_state.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_storage.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_stores.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_supervisor.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_tasks.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_tools_dependencies.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_tools_filesystem.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_tools_git.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_tools_search.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_tools_terminal.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_verification.py +0 -0
- {forgex_cli-0.1.1 → forgex_cli-0.1.2}/tests/unit/test_workflow.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: forgex-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: FORGEX — multi-agent AI software engineering. Plan. Build. Refine. Verify.
|
|
5
5
|
Project-URL: Homepage, https://github.com/B-max12/Forgex
|
|
6
6
|
Project-URL: Repository, https://github.com/B-max12/Forgex
|
|
@@ -168,11 +168,12 @@ class ForgexREPL:
|
|
|
168
168
|
|
|
169
169
|
def _run_setup_wizard(self) -> None:
|
|
170
170
|
"""Run the setup wizard directly (not through CliRunner) so it can read real stdin."""
|
|
171
|
+
import click
|
|
171
172
|
from forgex.cli.commands.config import setup_command
|
|
172
173
|
|
|
173
|
-
# Build a minimal typer.Context so ui_from() can work
|
|
174
174
|
try:
|
|
175
|
-
|
|
175
|
+
# Create a plain click Context — setup_command only needs ctx.obj for ui_from()
|
|
176
|
+
ctx = click.Context(click.Command("setup"))
|
|
176
177
|
ctx.obj = {"verbose": False, "quiet": False, "json": False, "plain": False}
|
|
177
178
|
setup_command(ctx)
|
|
178
179
|
self.session.refresh()
|
|
@@ -341,30 +342,26 @@ class ForgexREPL:
|
|
|
341
342
|
break
|
|
342
343
|
|
|
343
344
|
def _run_cli_command(self, args: list[str]) -> bool:
|
|
344
|
-
"""Invoke a Typer CLI command within the REPL session.
|
|
345
|
+
"""Invoke a Typer CLI command within the REPL session.
|
|
346
|
+
|
|
347
|
+
Uses subprocess to run each command so that:
|
|
348
|
+
1. Each command gets a fresh event loop (fixes 'Event loop is closed')
|
|
349
|
+
2. Interactive prompts can read real stdin
|
|
350
|
+
3. Rich output goes directly to the terminal
|
|
351
|
+
"""
|
|
345
352
|
# Interactive commands that need real stdin must bypass CliRunner
|
|
346
353
|
if args == ["config", "setup"]:
|
|
347
354
|
self._run_setup_wizard()
|
|
348
355
|
return True
|
|
349
356
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
from forgex.cli.app import app
|
|
357
|
+
import subprocess
|
|
353
358
|
|
|
354
|
-
runner = CliRunner()
|
|
355
359
|
success = False
|
|
356
360
|
try:
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
sys.stdout.flush()
|
|
362
|
-
if result.exit_code != 0 and result.exception:
|
|
363
|
-
if isinstance(result.exception, ForgexError):
|
|
364
|
-
self.console.print(f"[red]✗[/red] {result.exception}")
|
|
365
|
-
elif not isinstance(result.exception, SystemExit):
|
|
366
|
-
self.console.print(f"[red]Error:[/red] {result.exception}")
|
|
367
|
-
success = result.exit_code == 0
|
|
361
|
+
# Run as a subprocess so each command gets a fresh Python/asyncio state
|
|
362
|
+
cmd = [sys.executable, "-m", "forgex", *args]
|
|
363
|
+
result = subprocess.run(cmd, cwd=os.getcwd())
|
|
364
|
+
success = result.returncode == 0
|
|
368
365
|
except ForgexError as exc:
|
|
369
366
|
self.console.print(f"[red]✗[/red] {exc}")
|
|
370
367
|
except KeyboardInterrupt:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|