forgex-cli 0.1.0__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.
Files changed (197) hide show
  1. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/PKG-INFO +1 -1
  2. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/__init__.py +1 -1
  3. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/repl.py +34 -16
  4. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/.github/workflows/ci.yml +0 -0
  5. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/.github/workflows/release.yml +0 -0
  6. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/.gitignore +0 -0
  7. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/CHANGELOG.md +0 -0
  8. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/LICENSE +0 -0
  9. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/README.md +0 -0
  10. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/SECURITY.md +0 -0
  11. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/docs/agents.md +0 -0
  12. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/docs/architecture.md +0 -0
  13. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/docs/configuration.md +0 -0
  14. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/docs/decisions.md +0 -0
  15. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/docs/providers.md +0 -0
  16. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/docs/quickstart.md +0 -0
  17. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/docs/sandbox.md +0 -0
  18. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/docs/security.md +0 -0
  19. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/examples/demo-project/README.md +0 -0
  20. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/examples/demo-project/pyproject.toml +0 -0
  21. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/examples/demo-project/src/demo/__init__.py +0 -0
  22. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/examples/demo-project/src/demo/calc.py +0 -0
  23. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/examples/demo-project/tests/test_calc.py +0 -0
  24. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/pyproject.toml +0 -0
  25. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/__main__.py +0 -0
  26. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/agents/__init__.py +0 -0
  27. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/agents/architect.py +0 -0
  28. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/agents/base.py +0 -0
  29. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/agents/builder.py +0 -0
  30. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/agents/ensemble.py +0 -0
  31. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/agents/expert_coder.py +0 -0
  32. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/agents/supervisor.py +0 -0
  33. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/__init__.py +0 -0
  34. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/app.py +0 -0
  35. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/build_views.py +0 -0
  36. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/__init__.py +0 -0
  37. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/build.py +0 -0
  38. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/checkpoint.py +0 -0
  39. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/config.py +0 -0
  40. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/context.py +0 -0
  41. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/diff.py +0 -0
  42. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/do_cmd.py +0 -0
  43. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/doctor.py +0 -0
  44. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/fix.py +0 -0
  45. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/init.py +0 -0
  46. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/logs.py +0 -0
  47. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/models.py +0 -0
  48. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/plan.py +0 -0
  49. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/review.py +0 -0
  50. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/rollback.py +0 -0
  51. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/run.py +0 -0
  52. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/status.py +0 -0
  53. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/supervise.py +0 -0
  54. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/task.py +0 -0
  55. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/tools.py +0 -0
  56. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/commands/verify.py +0 -0
  57. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/context_memory.py +0 -0
  58. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/intent.py +0 -0
  59. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/progress.py +0 -0
  60. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/runtime.py +0 -0
  61. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/session.py +0 -0
  62. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/cli/ui.py +0 -0
  63. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/config/__init__.py +0 -0
  64. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/config/loader.py +0 -0
  65. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/config/schema.py +0 -0
  66. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/context/__init__.py +0 -0
  67. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/context/chunker.py +0 -0
  68. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/context/dependency_graph.py +0 -0
  69. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/context/indexer.py +0 -0
  70. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/context/manager.py +0 -0
  71. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/context/retriever.py +0 -0
  72. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/models/__init__.py +0 -0
  73. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/models/base.py +0 -0
  74. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/models/capabilities.py +0 -0
  75. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/models/factory.py +0 -0
  76. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/models/groq.py +0 -0
  77. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/models/local.py +0 -0
  78. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/models/openai_compatible.py +0 -0
  79. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/models/registry.py +0 -0
  80. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/models/router.py +0 -0
  81. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/orchestration/__init__.py +0 -0
  82. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/orchestration/checkpoints.py +0 -0
  83. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/orchestration/engine.py +0 -0
  84. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/orchestration/events.py +0 -0
  85. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/orchestration/lockfile.py +0 -0
  86. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/orchestration/retry.py +0 -0
  87. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/orchestration/state.py +0 -0
  88. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/orchestration/stores.py +0 -0
  89. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/orchestration/workflow.py +0 -0
  90. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/project.py +0 -0
  91. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/prompts/__init__.py +0 -0
  92. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/prompts/architect.md +0 -0
  93. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/prompts/builder.md +0 -0
  94. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/prompts/expert_coder.md +0 -0
  95. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/prompts/reviewer.md +0 -0
  96. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/prompts/supervisor.md +0 -0
  97. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/research/__init__.py +0 -0
  98. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/research/citations.py +0 -0
  99. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/research/engine.py +0 -0
  100. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/research/sources.py +0 -0
  101. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/sandbox/__init__.py +0 -0
  102. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/sandbox/executor.py +0 -0
  103. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/sandbox/permissions.py +0 -0
  104. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/sandbox/policies.py +0 -0
  105. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/schemas/__init__.py +0 -0
  106. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/schemas/agent.py +0 -0
  107. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/schemas/checkpoint.py +0 -0
  108. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/schemas/error.py +0 -0
  109. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/schemas/event.py +0 -0
  110. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/schemas/plan.py +0 -0
  111. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/schemas/project.py +0 -0
  112. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/schemas/research.py +0 -0
  113. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/schemas/result.py +0 -0
  114. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/schemas/task.py +0 -0
  115. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/storage/__init__.py +0 -0
  116. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/storage/database.py +0 -0
  117. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/storage/migrations.py +0 -0
  118. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/storage/repositories.py +0 -0
  119. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/tools/__init__.py +0 -0
  120. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/tools/base.py +0 -0
  121. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/tools/dependencies.py +0 -0
  122. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/tools/filesystem.py +0 -0
  123. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/tools/git.py +0 -0
  124. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/tools/project.py +0 -0
  125. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/tools/search.py +0 -0
  126. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/tools/terminal.py +0 -0
  127. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/tools/testing.py +0 -0
  128. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/tools/verification.py +0 -0
  129. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/utils/__init__.py +0 -0
  130. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/utils/logging.py +0 -0
  131. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/utils/paths.py +0 -0
  132. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/src/forgex/utils/redact.py +0 -0
  133. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/__init__.py +0 -0
  134. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/conftest.py +0 -0
  135. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/__init__.py +0 -0
  136. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_agents_architect.py +0 -0
  137. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_builder_agent.py +0 -0
  138. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_checkpoints.py +0 -0
  139. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_cli.py +0 -0
  140. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_cli_build.py +0 -0
  141. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_cli_checkpoint.py +0 -0
  142. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_cli_do.py +0 -0
  143. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_cli_models.py +0 -0
  144. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_cli_plan.py +0 -0
  145. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_cli_review.py +0 -0
  146. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_cli_surface.py +0 -0
  147. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_cli_task.py +0 -0
  148. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_cli_tools.py +0 -0
  149. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_cli_verify.py +0 -0
  150. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_config.py +0 -0
  151. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_config_env.py +0 -0
  152. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_config_setup.py +0 -0
  153. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_context_agents.py +0 -0
  154. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_context_manager.py +0 -0
  155. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_context_memory.py +0 -0
  156. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_engine.py +0 -0
  157. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_ensemble.py +0 -0
  158. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_events.py +0 -0
  159. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_executor.py +0 -0
  160. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_expert_coder.py +0 -0
  161. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_fix.py +0 -0
  162. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_indexer.py +0 -0
  163. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_init.py +0 -0
  164. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_intent.py +0 -0
  165. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_large_repo.py +0 -0
  166. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_offline.py +0 -0
  167. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_packaging.py +0 -0
  168. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_paths.py +0 -0
  169. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_permissions.py +0 -0
  170. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_plan_schemas.py +0 -0
  171. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_policies.py +0 -0
  172. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_project.py +0 -0
  173. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_providers.py +0 -0
  174. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_recovery.py +0 -0
  175. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_redact.py +0 -0
  176. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_registry.py +0 -0
  177. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_repl.py +0 -0
  178. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_research.py +0 -0
  179. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_retriever.py +0 -0
  180. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_retry.py +0 -0
  181. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_router.py +0 -0
  182. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_run_cli.py +0 -0
  183. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_runtime.py +0 -0
  184. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_security.py +0 -0
  185. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_session.py +0 -0
  186. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_state.py +0 -0
  187. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_storage.py +0 -0
  188. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_stores.py +0 -0
  189. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_supervisor.py +0 -0
  190. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_tasks.py +0 -0
  191. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_tools_dependencies.py +0 -0
  192. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_tools_filesystem.py +0 -0
  193. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_tools_git.py +0 -0
  194. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_tools_search.py +0 -0
  195. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_tools_terminal.py +0 -0
  196. {forgex_cli-0.1.0 → forgex_cli-0.1.2}/tests/unit/test_verification.py +0 -0
  197. {forgex_cli-0.1.0 → 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.0
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
@@ -1,3 +1,3 @@
1
1
  """FORGEX — Plan. Build. Refine. Verify."""
2
2
 
3
- __version__ = "0.1.0"
3
+ __version__ = "0.1.2"
@@ -9,6 +9,7 @@ import sys
9
9
  from pathlib import Path
10
10
  from typing import Any
11
11
 
12
+ import typer
12
13
  from prompt_toolkit import PromptSession
13
14
  from prompt_toolkit.completion import WordCompleter
14
15
  from prompt_toolkit.formatted_text import HTML
@@ -163,7 +164,23 @@ class ForgexREPL:
163
164
  if sys.stdin.isatty():
164
165
  from rich.prompt import Confirm
165
166
  if Confirm.ask("Launch the guided setup wizard now?", default=True):
166
- self._run_cli_command(["config", "setup"])
167
+ self._run_setup_wizard()
168
+
169
+ def _run_setup_wizard(self) -> None:
170
+ """Run the setup wizard directly (not through CliRunner) so it can read real stdin."""
171
+ import click
172
+ from forgex.cli.commands.config import setup_command
173
+
174
+ try:
175
+ # Create a plain click Context — setup_command only needs ctx.obj for ui_from()
176
+ ctx = click.Context(click.Command("setup"))
177
+ ctx.obj = {"verbose": False, "quiet": False, "json": False, "plain": False}
178
+ setup_command(ctx)
179
+ self.session.refresh()
180
+ except (KeyboardInterrupt, EOFError):
181
+ self.console.print("\n[yellow]Setup cancelled.[/yellow]")
182
+ except Exception as exc:
183
+ self.console.print(f"[red]Setup error:[/red] {exc}")
167
184
 
168
185
  def print_help(self) -> None:
169
186
  """Display help table for natural language usage and power user commands."""
@@ -325,25 +342,26 @@ class ForgexREPL:
325
342
  break
326
343
 
327
344
  def _run_cli_command(self, args: list[str]) -> bool:
328
- """Invoke a Typer CLI command within the REPL session."""
329
- from typer.testing import CliRunner
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
+ """
352
+ # Interactive commands that need real stdin must bypass CliRunner
353
+ if args == ["config", "setup"]:
354
+ self._run_setup_wizard()
355
+ return True
330
356
 
331
- from forgex.cli.app import app
357
+ import subprocess
332
358
 
333
- runner = CliRunner()
334
359
  success = False
335
360
  try:
336
- result = runner.invoke(app, args, catch_exceptions=True)
337
- if result.output:
338
- # Print output directly
339
- sys.stdout.write(result.output)
340
- sys.stdout.flush()
341
- if result.exit_code != 0 and result.exception:
342
- if isinstance(result.exception, ForgexError):
343
- self.console.print(f"[red]✗[/red] {result.exception}")
344
- elif not isinstance(result.exception, SystemExit):
345
- self.console.print(f"[red]Error:[/red] {result.exception}")
346
- 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
347
365
  except ForgexError as exc:
348
366
  self.console.print(f"[red]✗[/red] {exc}")
349
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