forgeoptimizer 1.0.0__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.
Files changed (344) hide show
  1. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/.github/workflows/ci.yml +0 -2
  2. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/.gitignore +14 -1
  3. forgeoptimizer-1.0.2/CHANGELOG.md +27 -0
  4. forgeoptimizer-1.0.2/CONTRIBUTING.md +107 -0
  5. forgeoptimizer-1.0.2/CREDITS.md +19 -0
  6. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/Forge.toml +1 -1
  7. forgeoptimizer-1.0.2/MIGRATION.md +40 -0
  8. forgeoptimizer-1.0.2/PKG-INFO +199 -0
  9. forgeoptimizer-1.0.2/README.md +149 -0
  10. forgeoptimizer-1.0.2/RELEASE_NOTES.md +52 -0
  11. forgeoptimizer-1.0.2/SECURITY.md +42 -0
  12. forgeoptimizer-1.0.2/SUPPORT.md +32 -0
  13. forgeoptimizer-1.0.2/docs/commands.md +102 -0
  14. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/__init__.py +5 -1
  15. forgeoptimizer-1.0.2/forgecli/budget/__init__.py +20 -0
  16. forgeoptimizer-1.0.2/forgecli/budget/middleware.py +134 -0
  17. forgeoptimizer-1.0.2/forgecli/budget/planner.py +102 -0
  18. forgeoptimizer-1.0.2/forgecli/budget/window.py +89 -0
  19. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/build/__init__.py +131 -2
  20. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/build/apply.py +213 -7
  21. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/build/caveman_optimize.py +33 -2
  22. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/build/diff_extract.py +203 -12
  23. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/build/llm.py +168 -2
  24. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/build/optimize.py +33 -2
  25. forgeoptimizer-1.0.2/forgecli/build/patch_generator.py +112 -0
  26. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/build/pipeline.py +79 -3
  27. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/build/retrieval.py +148 -4
  28. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/build/summarize.py +73 -1
  29. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/build/test_run.py +107 -0
  30. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/builder/__init__.py +7 -0
  31. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/builder/builder.py +42 -0
  32. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/builder/editor.py +26 -0
  33. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/builder/formatter.py +18 -0
  34. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/cli/__init__.py +3 -0
  35. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/cli/bootstrap.py +219 -6
  36. forgeoptimizer-1.0.2/forgecli/cli/commands_auth.py +112 -0
  37. forgeoptimizer-1.0.2/forgecli/cli/commands_commit.py +122 -0
  38. forgeoptimizer-1.0.2/forgecli/cli/commands_diagnostics.py +857 -0
  39. forgeoptimizer-1.0.2/forgecli/cli/commands_graph.py +282 -0
  40. forgeoptimizer-1.0.2/forgecli/cli/commands_inspect.py +404 -0
  41. forgeoptimizer-1.0.2/forgecli/cli/commands_wrappers.py +66 -0
  42. forgeoptimizer-1.0.2/forgecli/cli/daemon.py +1128 -0
  43. forgeoptimizer-1.0.2/forgecli/cli/daemon_utils.py +53 -0
  44. forgeoptimizer-1.0.2/forgecli/cli/main.py +493 -0
  45. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/cli/ui.py +50 -0
  46. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/config/__init__.py +19 -0
  47. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/config/loader.py +77 -1
  48. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/config/settings.py +237 -8
  49. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/config/writer.py +132 -4
  50. forgeoptimizer-1.0.2/forgecli/conversation/__init__.py +11 -0
  51. forgeoptimizer-1.0.2/forgecli/conversation/manager.py +198 -0
  52. forgeoptimizer-1.0.2/forgecli/conversation/session.py +53 -0
  53. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/core/__init__.py +20 -0
  54. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/core/container.py +55 -0
  55. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/core/context.py +38 -0
  56. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/core/credentials.py +98 -0
  57. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/core/errors.py +24 -0
  58. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/core/events.py +53 -1
  59. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/core/logging.py +42 -1
  60. forgeoptimizer-1.0.2/forgecli/core/models.py +423 -0
  61. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/core/plugins.py +39 -3
  62. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/core/service.py +17 -0
  63. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/docs/__init__.py +3 -0
  64. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/docs/generator.py +95 -21
  65. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/__init__.py +39 -1
  66. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/context.py +150 -32
  67. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/defaults.py +39 -0
  68. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/events.py +174 -21
  69. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/execution.py +463 -42
  70. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/plugins.py +120 -13
  71. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/runner.py +136 -1
  72. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/stages/__init__.py +13 -0
  73. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/stages/caveman_optimizer.py +33 -0
  74. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/stages/context_optimizer.py +30 -0
  75. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/stages/execution_engine_stage.py +89 -10
  76. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/stages/git_engine.py +21 -0
  77. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/stages/intent_analyzer.py +25 -0
  78. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/stages/model_router.py +53 -2
  79. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/stages/planning_engine.py +35 -0
  80. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/stages/repository_analyzer.py +40 -2
  81. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/engine/stages/validation_engine.py +71 -3
  82. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/git/__init__.py +6 -0
  83. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/git/repo.py +44 -0
  84. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/git/service.py +34 -0
  85. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/graph/__init__.py +40 -16
  86. forgeoptimizer-1.0.0/forgecli/graph/backend_graphify.py → forgeoptimizer-1.0.2/forgecli/graph/backend_forgegraph.py +494 -63
  87. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/graph/edge.py +11 -0
  88. forgeoptimizer-1.0.2/forgecli/graph/forgegraph.py +845 -0
  89. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/graph/graph.py +72 -3
  90. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/graph/indexer.py +62 -0
  91. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/graph/node.py +40 -0
  92. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/graph/repository.py +152 -1
  93. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/memory/__init__.py +9 -0
  94. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/memory/cache.py +51 -1
  95. forgeoptimizer-1.0.2/forgecli/memory/caching_middleware.py +157 -0
  96. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/memory/history.py +97 -3
  97. forgeoptimizer-1.0.2/forgecli/memory/memory_compression.py +162 -0
  98. forgeoptimizer-1.0.2/forgecli/memory/middleware.py +120 -0
  99. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/memory/store.py +69 -5
  100. forgeoptimizer-1.0.2/forgecli/middleware/__init__.py +85 -0
  101. forgeoptimizer-1.0.2/forgecli/middleware/base.py +207 -0
  102. forgeoptimizer-1.0.2/forgecli/middleware/builder.py +74 -0
  103. forgeoptimizer-1.0.2/forgecli/middleware/caveman_adapter.py +140 -0
  104. forgeoptimizer-1.0.2/forgecli/middleware/context.py +20 -0
  105. forgeoptimizer-1.0.2/forgecli/middleware/decorators.py +53 -0
  106. forgeoptimizer-1.0.2/forgecli/middleware/defaults.py +951 -0
  107. forgeoptimizer-1.0.2/forgecli/middleware/exceptions.py +70 -0
  108. forgeoptimizer-1.0.2/forgecli/middleware/executor.py +119 -0
  109. forgeoptimizer-1.0.2/forgecli/middleware/graphify_adapter.py +169 -0
  110. forgeoptimizer-1.0.2/forgecli/middleware/middleware_manager.py +239 -0
  111. forgeoptimizer-1.0.2/forgecli/middleware/pipeline.py +326 -0
  112. forgeoptimizer-1.0.2/forgecli/middleware/ponytail_adapter.py +140 -0
  113. forgeoptimizer-1.0.2/forgecli/middleware/registration.py +99 -0
  114. forgeoptimizer-1.0.2/forgecli/middleware/request.py +115 -0
  115. forgeoptimizer-1.0.2/forgecli/middleware/response.py +100 -0
  116. forgeoptimizer-1.0.2/forgecli/negotiator/__init__.py +11 -0
  117. forgeoptimizer-1.0.2/forgecli/negotiator/middleware.py +168 -0
  118. forgeoptimizer-1.0.2/forgecli/negotiator/negotiator.py +183 -0
  119. forgeoptimizer-1.0.2/forgecli/observability/__init__.py +23 -0
  120. forgeoptimizer-1.0.2/forgecli/observability/health.py +97 -0
  121. forgeoptimizer-1.0.2/forgecli/observability/metrics.py +189 -0
  122. forgeoptimizer-1.0.2/forgecli/observability/middleware.py +115 -0
  123. forgeoptimizer-1.0.2/forgecli/observability/tracing.py +100 -0
  124. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/__init__.py +7 -0
  125. forgeoptimizer-1.0.2/forgecli/optimizer/adaptive_budget.py +127 -0
  126. forgeoptimizer-1.0.2/forgecli/optimizer/ast_extractor.py +707 -0
  127. forgeoptimizer-1.0.2/forgecli/optimizer/cache.py +208 -0
  128. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/caveman/__init__.py +6 -11
  129. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/caveman/cli.py +40 -3
  130. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/caveman/decorator.py +44 -0
  131. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/caveman/factory.py +33 -0
  132. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/caveman/ruleset.py +148 -25
  133. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/caveman/state.py +40 -4
  134. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/chunker.py +73 -0
  135. forgeoptimizer-1.0.2/forgecli/optimizer/comment_stripper.py +293 -0
  136. forgeoptimizer-1.0.2/forgecli/optimizer/compression.py +365 -0
  137. forgeoptimizer-1.0.2/forgecli/optimizer/cost_estimator.py +122 -0
  138. forgeoptimizer-1.0.2/forgecli/optimizer/embedding_cache.py +139 -0
  139. forgeoptimizer-1.0.2/forgecli/optimizer/git_context.py +206 -0
  140. forgeoptimizer-1.0.2/forgecli/optimizer/intelligent_retrieval.py +277 -0
  141. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/optimizer.py +71 -0
  142. forgeoptimizer-1.0.2/forgecli/optimizer/orchestrator.py +256 -0
  143. forgeoptimizer-1.0.2/forgecli/optimizer/output/__init__.py +10 -0
  144. forgeoptimizer-1.0.2/forgecli/optimizer/output/optimizer.py +509 -0
  145. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/ponytail/__init__.py +4 -6
  146. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/ponytail/cli.py +133 -14
  147. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/ponytail/decorator.py +50 -3
  148. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/ponytail/factory.py +33 -0
  149. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/ponytail/ruleset.py +132 -6
  150. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/ponytail/state.py +40 -4
  151. forgeoptimizer-1.0.2/forgecli/optimizer/prompt_optimizer.py +154 -0
  152. forgeoptimizer-1.0.2/forgecli/optimizer/quality_validation.py +115 -0
  153. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/ranker.py +25 -0
  154. forgeoptimizer-1.0.2/forgecli/optimizer/retrieval_cache.py +120 -0
  155. forgeoptimizer-1.0.2/forgecli/optimizer/semantic_ranking.py +86 -0
  156. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/optimizer/summarizer.py +32 -0
  157. forgeoptimizer-1.0.2/forgecli/optimizer/token_estimator.py +117 -0
  158. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/orchestrator/__init__.py +690 -59
  159. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/planner/__init__.py +31 -0
  160. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/planner/agent.py +46 -0
  161. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/planner/plan.py +56 -0
  162. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/planner/planner.py +10 -0
  163. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/planner/render.py +251 -9
  164. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/planner/serialize.py +98 -3
  165. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/planner/software.py +818 -23
  166. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/platform/__init__.py +37 -0
  167. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/platform/core.py +182 -13
  168. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/platform/deps.py +397 -44
  169. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/platform/paths.py +204 -18
  170. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/platform/shell.py +133 -5
  171. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/platform/update.py +211 -4
  172. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/plugins/__init__.py +200 -20
  173. forgeoptimizer-1.0.2/forgecli/plugins/hook.py +109 -0
  174. forgeoptimizer-1.0.2/forgecli/policy/__init__.py +30 -0
  175. forgeoptimizer-1.0.2/forgecli/policy/engine.py +94 -0
  176. forgeoptimizer-1.0.2/forgecli/policy/exceptions.py +28 -0
  177. forgeoptimizer-1.0.2/forgecli/policy/middleware.py +69 -0
  178. forgeoptimizer-1.0.2/forgecli/policy/rules.py +265 -0
  179. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/prompts/__init__.py +7 -0
  180. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/prompts/loader.py +21 -0
  181. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/prompts/registry.py +25 -0
  182. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/prompts/renderer.py +13 -0
  183. forgeoptimizer-1.0.2/forgecli/providers/__init__.py +126 -0
  184. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/providers/anthropic.py +217 -14
  185. forgeoptimizer-1.0.2/forgecli/providers/base.py +1194 -0
  186. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/providers/builtin.py +11 -0
  187. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/providers/conversation.py +72 -6
  188. forgeoptimizer-1.0.2/forgecli/providers/exceptions.py +68 -0
  189. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/providers/google.py +288 -35
  190. forgeoptimizer-1.0.2/forgecli/providers/health.py +44 -0
  191. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/providers/http_base.py +231 -28
  192. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/providers/mock.py +92 -6
  193. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/providers/openai.py +192 -10
  194. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/providers/openai_compatible.py +894 -67
  195. forgeoptimizer-1.0.2/forgecli/providers/provider_capabilities.py +96 -0
  196. forgeoptimizer-1.0.2/forgecli/providers/provider_context.py +45 -0
  197. forgeoptimizer-1.0.2/forgecli/providers/provider_events.py +129 -0
  198. forgeoptimizer-1.0.2/forgecli/providers/provider_factory.py +165 -0
  199. forgeoptimizer-1.0.2/forgecli/providers/provider_manager.py +167 -0
  200. forgeoptimizer-1.0.2/forgecli/providers/provider_metadata.py +25 -0
  201. forgeoptimizer-1.0.2/forgecli/providers/provider_registry.py +183 -0
  202. forgeoptimizer-1.0.2/forgecli/providers/provider_router.py +252 -0
  203. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/providers/router.py +334 -35
  204. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/providers/router_state.py +74 -0
  205. forgeoptimizer-1.0.2/forgecli/registry/__init__.py +10 -0
  206. forgeoptimizer-1.0.2/forgecli/registry/model_registry.py +317 -0
  207. forgeoptimizer-1.0.2/forgecli/resilience/__init__.py +33 -0
  208. forgeoptimizer-1.0.2/forgecli/resilience/circuit_breaker.py +149 -0
  209. forgeoptimizer-1.0.2/forgecli/resilience/exceptions.py +49 -0
  210. forgeoptimizer-1.0.2/forgecli/resilience/middleware.py +110 -0
  211. forgeoptimizer-1.0.2/forgecli/resilience/retry.py +115 -0
  212. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/__init__.py +24 -0
  213. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/analyzer.py +116 -9
  214. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/__init__.py +1 -0
  215. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/architecture.py +238 -13
  216. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/complexity.py +148 -10
  217. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/dead_code.py +238 -15
  218. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/duplicates.py +152 -16
  219. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/performance.py +138 -6
  220. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/analyzers/security.py +232 -16
  221. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/finding.py +56 -0
  222. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/report.py +332 -19
  223. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/repository.py +111 -3
  224. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/review/suggestions.py +83 -1
  225. forgeoptimizer-1.0.2/forgecli/runtime/__init__.py +10 -0
  226. forgeoptimizer-1.0.2/forgecli/runtime/agents.py +220 -0
  227. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/runtime/cache_store.py +66 -3
  228. forgeoptimizer-1.0.2/forgecli/runtime/mcp_config.py +397 -0
  229. forgeoptimizer-1.0.2/forgecli/runtime/pipeline_runner.py +306 -0
  230. forgeoptimizer-1.0.2/forgecli/runtime/prepare.py +249 -0
  231. forgeoptimizer-1.0.2/forgecli/runtime/shared_extraction.py +175 -0
  232. forgeoptimizer-1.0.2/forgecli/runtime/wrappers.py +98 -0
  233. forgeoptimizer-1.0.2/forgecli/runtime_core/__init__.py +104 -0
  234. forgeoptimizer-1.0.2/forgecli/runtime_core/config_manager.py +245 -0
  235. forgeoptimizer-1.0.2/forgecli/runtime_core/container.py +458 -0
  236. forgeoptimizer-1.0.2/forgecli/runtime_core/context.py +268 -0
  237. forgeoptimizer-1.0.2/forgecli/runtime_core/errors.py +95 -0
  238. forgeoptimizer-1.0.2/forgecli/runtime_core/events.py +213 -0
  239. forgeoptimizer-1.0.2/forgecli/runtime_core/factory.py +51 -0
  240. forgeoptimizer-1.0.2/forgecli/runtime_core/interfaces.py +188 -0
  241. forgeoptimizer-1.0.2/forgecli/runtime_core/lifecycle.py +275 -0
  242. forgeoptimizer-1.0.2/forgecli/runtime_core/provider_registry.py +190 -0
  243. forgeoptimizer-1.0.2/forgecli/runtime_core/request.py +184 -0
  244. forgeoptimizer-1.0.2/forgecli/runtime_core/response.py +158 -0
  245. forgeoptimizer-1.0.2/forgecli/runtime_core/service_registry.py +269 -0
  246. forgeoptimizer-1.0.2/forgecli/scheduler/__init__.py +22 -0
  247. forgeoptimizer-1.0.2/forgecli/scheduler/scheduler.py +143 -0
  248. forgeoptimizer-1.0.2/forgecli/scheduler/task.py +30 -0
  249. forgeoptimizer-1.0.2/forgecli/scheduler/worker.py +127 -0
  250. forgeoptimizer-1.0.2/forgecli/streaming/__init__.py +20 -0
  251. forgeoptimizer-1.0.2/forgecli/streaming/events.py +63 -0
  252. forgeoptimizer-1.0.2/forgecli/streaming/middleware.py +155 -0
  253. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/templates/__init__.py +6 -0
  254. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/templates/engine.py +29 -1
  255. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/templates/registry.py +25 -0
  256. forgeoptimizer-1.0.2/forgecli/transport/__init__.py +18 -0
  257. forgeoptimizer-1.0.2/forgecli/transport/daemon.py +80 -0
  258. forgeoptimizer-1.0.2/forgecli/transport/http_server.py +99 -0
  259. forgeoptimizer-1.0.2/forgecli/transport/server.py +53 -0
  260. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/utils/__init__.py +13 -0
  261. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/utils/fs.py +147 -13
  262. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/utils/ids.py +6 -0
  263. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/utils/io.py +19 -0
  264. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/utils/paths.py +78 -3
  265. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/forgecli/utils/timing.py +11 -0
  266. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/packaging/scoop/forgecli.json +2 -2
  267. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/packaging/winget/forgecli.ForgeCli.yaml +3 -3
  268. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/pyproject.toml +10 -7
  269. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/__init__.py +1 -0
  270. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/conftest.py +42 -0
  271. forgeoptimizer-1.0.2/tests/test_auth.py +110 -0
  272. forgeoptimizer-1.0.2/tests/test_budget_context.py +239 -0
  273. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_build_pipeline.py +445 -52
  274. forgeoptimizer-1.0.2/tests/test_caching_observability.py +405 -0
  275. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_caveman_cli.py +115 -9
  276. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_caveman_ruleset.py +187 -2
  277. forgeoptimizer-1.0.2/tests/test_cli.py +554 -0
  278. forgeoptimizer-1.0.2/tests/test_commit.py +173 -0
  279. forgeoptimizer-1.0.2/tests/test_config.py +216 -0
  280. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_container.py +46 -0
  281. forgeoptimizer-1.0.2/tests/test_conversation_optimization.py +488 -0
  282. forgeoptimizer-1.0.2/tests/test_diagnostics.py +65 -0
  283. forgeoptimizer-1.0.2/tests/test_e2e.py +578 -0
  284. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_engine.py +465 -87
  285. forgeoptimizer-1.0.0/tests/test_graphify_client.py → forgeoptimizer-1.0.2/tests/test_forgegraph_client.py +195 -35
  286. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_graph.py +34 -0
  287. forgeoptimizer-1.0.2/tests/test_mcp_config.py +402 -0
  288. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_memory.py +42 -2
  289. forgeoptimizer-1.0.2/tests/test_middleware.py +1320 -0
  290. forgeoptimizer-1.0.2/tests/test_negotiator.py +405 -0
  291. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_optimizer.py +44 -2
  292. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_orchestrator.py +320 -36
  293. forgeoptimizer-1.0.2/tests/test_output_optimization.py +211 -0
  294. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_planner.py +41 -0
  295. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_planner_render.py +112 -4
  296. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_platform.py +391 -42
  297. forgeoptimizer-1.0.2/tests/test_policy.py +355 -0
  298. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_ponytail_cli.py +202 -17
  299. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_ponytail_ruleset.py +176 -1
  300. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_prompts.py +12 -0
  301. forgeoptimizer-1.0.2/tests/test_provider.py +873 -0
  302. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_providers.py +82 -0
  303. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_providers_http.py +273 -19
  304. forgeoptimizer-1.0.2/tests/test_redesign_optimizers.py +239 -0
  305. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_repository_graph.py +159 -27
  306. forgeoptimizer-1.0.2/tests/test_resilience.py +245 -0
  307. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_review.py +398 -39
  308. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_router.py +152 -6
  309. forgeoptimizer-1.0.2/tests/test_runtime.py +225 -0
  310. forgeoptimizer-1.0.2/tests/test_runtime_core.py +504 -0
  311. forgeoptimizer-1.0.2/tests/test_runtime_core_phase2.py +1209 -0
  312. forgeoptimizer-1.0.2/tests/test_scheduler_plugins.py +176 -0
  313. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_software_planner.py +181 -16
  314. forgeoptimizer-1.0.2/tests/test_streaming.py +202 -0
  315. forgeoptimizer-1.0.2/tests/test_token_optimizations.py +185 -0
  316. forgeoptimizer-1.0.2/tests/test_transport.py +125 -0
  317. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/tests/test_utils.py +59 -4
  318. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/uv.lock +282 -2
  319. forgeoptimizer-1.0.0/PKG-INFO +0 -169
  320. forgeoptimizer-1.0.0/README.md +0 -100
  321. forgeoptimizer-1.0.0/forgecli/cli/commands_graph.py +0 -137
  322. forgeoptimizer-1.0.0/forgecli/cli/commands_wrappers.py +0 -63
  323. forgeoptimizer-1.0.0/forgecli/cli/main.py +0 -122
  324. forgeoptimizer-1.0.0/forgecli/core/models.py +0 -159
  325. forgeoptimizer-1.0.0/forgecli/graph/graphify.py +0 -412
  326. forgeoptimizer-1.0.0/forgecli/providers/__init__.py +0 -39
  327. forgeoptimizer-1.0.0/forgecli/providers/base.py +0 -206
  328. forgeoptimizer-1.0.0/forgecli/runtime/__init__.py +0 -6
  329. forgeoptimizer-1.0.0/forgecli/runtime/prepare.py +0 -199
  330. forgeoptimizer-1.0.0/forgecli/runtime/wrappers.py +0 -152
  331. forgeoptimizer-1.0.0/forgecli/sdk/__init__.py +0 -132
  332. forgeoptimizer-1.0.0/forgecli/sdk/events.py +0 -206
  333. forgeoptimizer-1.0.0/forgecli/sdk/interfaces.py +0 -282
  334. forgeoptimizer-1.0.0/forgecli/sdk/loader.py +0 -243
  335. forgeoptimizer-1.0.0/forgecli/sdk/manager.py +0 -693
  336. forgeoptimizer-1.0.0/forgecli/sdk/manifest.py +0 -397
  337. forgeoptimizer-1.0.0/forgecli/sdk/sandbox.py +0 -197
  338. forgeoptimizer-1.0.0/forgecli/sdk/version.py +0 -316
  339. forgeoptimizer-1.0.0/forgecli.toml +0 -1
  340. forgeoptimizer-1.0.0/tests/test_cli.py +0 -127
  341. forgeoptimizer-1.0.0/tests/test_config.py +0 -36
  342. forgeoptimizer-1.0.0/tests/test_runtime.py +0 -58
  343. forgeoptimizer-1.0.0/tests/test_sdk.py +0 -581
  344. {forgeoptimizer-1.0.0 → forgeoptimizer-1.0.2}/LICENSE +0 -0
@@ -127,8 +127,6 @@ jobs:
127
127
  forge claude --help
128
128
  forge codex --help
129
129
  forge cursor --help
130
- forge opencode --help
131
- forge commandcode --help
132
130
 
133
131
 
134
132
  publish-testpypi:
@@ -8,7 +8,7 @@ __pycache__/
8
8
 
9
9
  # Distribution / packaging
10
10
  build/
11
- graphify-out/
11
+ forgegraph-out/
12
12
  dist/
13
13
  *.egg-info/
14
14
  *.egg
@@ -49,3 +49,16 @@ htmlcov/
49
49
  # Test artifacts (prevent CI failures)
50
50
  foo.py
51
51
  main.go
52
+
53
+ # Forge local configurations & editor integration settings
54
+ forgecli.toml
55
+ .cursor/
56
+ .mcp.json
57
+ .agents/
58
+
59
+ # Frontend build and dependencies
60
+ **/node_modules/
61
+ **/.next/
62
+ **/out/
63
+ **/dist/
64
+
@@ -0,0 +1,27 @@
1
+ # Changelog
2
+
3
+ ## 1.0.0 (2024-07-09)
4
+
5
+ ### Forge v1.0 — Initial Production Release
6
+
7
+ Forge is a lightweight, high-performance AI optimization runtime that prepares repository-aware context before launching supported AI coding tools.
8
+
9
+ ### Features
10
+
11
+ - **8 AI CLI Wrappers**: Unified launch for Claude Code, Codex CLI, Cursor CLI, Antigravity, Gemini CLI, Aider, OpenCode, and CommandCode through a single `launch_wrapper()` path.
12
+ - **19-Stage Middleware Pipeline**: Telemetry → Auth → Policy → Cache → History → Token → Context → Conversation → Caveman → Ponytail → Repository → DepGraph → SymbolLookup → Graphify → SemanticRetrieval → Streaming → Resilience → Provider → ResponseOptimizer.
13
+ - **Optimization Profiles**: Ponytail (prompt YAGNI rules), Caveman (output conciseness), and Output Optimization with `off/lite/full/ultra/wenyan` intensities.
14
+ - **ForgeGraph Integration**: Knowledge graph generation for intelligent context retrieval with `forge graph build`.
15
+ - **MCP Server**: Stdio Model Context Protocol server with 6 tools (`get_optimized_context`, `get_summary`, `get_dependency_graph`, `file_lookup`, `symbol_lookup`, `semantic_search`).
16
+ - **Background Daemon**: Repository watcher with auto-refresh, chunking, and graph snapshot on port 16868.
17
+ - **16 Provider Drivers**: OpenAI, Anthropic, Google Gemini, OpenRouter, Groq, Mistral, DeepSeek, GLM, Qwen, Kimi, Ollama, LM Studio, and more — with real HTTP implementations for the big three.
18
+ - **Developer Diagnostics**: `forge inspect`, `forge stats`, `forge doctor`, `forge profile`, `forge explain`.
19
+ - **Configuration**: TOML-based `forgecli.toml` with environment variable override for all settings.
20
+ - **Packaging**: pip install, CI/CD across ubuntu/macos/windows, PyPI ready.
21
+
22
+ ### System
23
+
24
+ - Python 3.12+ required
25
+ - 463+ tests passing
26
+ - 40% faster startup vs initial implementation (0.63s CLI import)
27
+ - MIT License
@@ -0,0 +1,107 @@
1
+ # Contributing to Forge
2
+
3
+ Thank you for your interest in contributing to **Forge**! Forge is a lightweight, high-performance AI optimization runtime designed to prepare repository-aware context before launching supported AI coding tools.
4
+
5
+ This document outlines the guidelines and best practices for contributing to the codebase.
6
+
7
+ ---
8
+
9
+ ## Code of Conduct
10
+
11
+ We expect all contributors to adhere to standard respectful community interactions. Be kind, helpful, and professional in all communications.
12
+
13
+ ---
14
+
15
+ ## Getting Started
16
+
17
+ ### Prerequisites
18
+ - **Python 3.12** or higher.
19
+ - [uv](https://github.com/astral-sh/uv) (recommended) or `pip` + `venv`.
20
+
21
+ ### Local Development Setup
22
+
23
+ 1. **Fork and Clone the Repository**
24
+ ```bash
25
+ git clone https://github.com/mdshzb04/Forge.git
26
+ cd Forge
27
+ ```
28
+
29
+ 2. **Create and Activate a Virtual Environment**
30
+ Using `uv` (recommended):
31
+ ```bash
32
+ uv venv
33
+ source .venv/bin/activate
34
+ ```
35
+ Or using standard Python:
36
+ ```bash
37
+ python -m venv .venv
38
+ source .venv/bin/activate
39
+ ```
40
+
41
+ 3. **Install Dependencies**
42
+ Install Forge in editable mode with development dependencies:
43
+ ```bash
44
+ pip install -e ".[dev]"
45
+ ```
46
+
47
+ ---
48
+
49
+ ## Development Workflow
50
+
51
+ ### Running Tests
52
+
53
+ We use `pytest` for all unit and integration testing. Ensure your tests pass before submitting any pull requests.
54
+
55
+ To run the full test suite:
56
+ ```bash
57
+ pytest
58
+ ```
59
+
60
+ To run a specific test file:
61
+ ```bash
62
+ pytest tests/test_mcp_config.py
63
+ ```
64
+
65
+ ### Code Quality & Styling
66
+
67
+ We use **Ruff** for linting, formatting, and import sorting.
68
+
69
+ To check for style violations:
70
+ ```bash
71
+ ruff check forgecli tests
72
+ ```
73
+
74
+ To automatically fix violations and format code:
75
+ ```bash
76
+ ruff check --fix forgecli tests
77
+ ruff format forgecli tests
78
+ ```
79
+
80
+ ### Static Type Checking
81
+
82
+ We use **mypy** for static type verification:
83
+ ```bash
84
+ mypy forgecli
85
+ ```
86
+
87
+ ---
88
+
89
+ ## Code Architecture
90
+
91
+ Forge consists of two main pillars:
92
+ 1. **`forgecli.runtime`**: Orchestrates runtime environments, command wrappers, daemon processing, and MCP standard input/output configurations.
93
+ 2. **`forgecli.optimizer`**: Contains token compression, Ponytail (YAGNI pruning rules), and Caveman (brevity prompts) components.
94
+
95
+ Ensure any changes respect this separation of concerns.
96
+
97
+ ---
98
+
99
+ ## Pull Request Guidelines
100
+
101
+ 1. **Branch Naming**: Use descriptive branch names (e.g., `feature/optimize-caching`, `bugfix/fix-toml-regex`).
102
+ 2. **Commit Messages**: Write clear, descriptive commit messages in the imperative mood (e.g., `Fix TOML config regex to correctly match blocks`).
103
+ 3. **Add Tests**: If you are adding a new feature or fixing a bug, please write corresponding tests in the `tests/` directory.
104
+ 4. **Documentation**: Update the `README.md`, `docs/`, or docstrings if your changes modify any public-facing behaviors or flags.
105
+ 5. **CI Compliance**: Ensure the Github Actions CI build passes.
106
+
107
+ Thank you for making Forge better for everyone! 🚀
@@ -0,0 +1,19 @@
1
+ # Acknowledgements & Credits
2
+
3
+ Forge draws inspiration from, and implements custom versions of ideas from, several excellent open-source projects and concepts in the AI developer tooling ecosystem. We would like to thank their authors and communities:
4
+
5
+ * **Graphify**
6
+ * **Contribution:** Inspired ideas around repository-aware knowledge graph generation and parsing to help AI engines navigate codebase structures.
7
+ * **License:** Licensed under the MIT License.
8
+
9
+ * **Caveman** (by Julius Brussee)
10
+ * **Original Project:** [github.com/JuliusBrussee/caveman](https://github.com/JuliusBrussee/caveman)
11
+ * **Contribution:** Inspired the concept of system-prompt communication compression and brevity constraints to reduce completion token sizes.
12
+ * **License:** Licensed under the MIT License.
13
+
14
+ * **Ponytail**
15
+ * **Contribution:** Inspired the implementation of the pragmatic YAGNI ("You Ain't Gonna Need It") prompt ruleset for code simplification.
16
+ * **License:** Licensed under the MIT License.
17
+
18
+ Forge adapts these open-source prompt optimization concepts into its own custom Python-based rulesets, combining them with original runtime infrastructure, background caching daemons, and IDE wrappers to provide a seamless context experience.
19
+
@@ -11,7 +11,7 @@ languages = ["python", "typescript"]
11
11
  [prompt_optimizer]
12
12
  backend = "ruleset"
13
13
  enabled = true
14
- intensity = "lite"
14
+ intensity = "full"
15
15
 
16
16
  [providers]
17
17
  allowed = ["mock"]
@@ -0,0 +1,40 @@
1
+ # Migration Guide
2
+
3
+ ## From Pre-1.0 to v1.0.0
4
+
5
+ Forge v1.0.0 is the first production release. If you were using earlier development versions, the following changes apply:
6
+
7
+ ### CLI Changes
8
+
9
+ All wrapper commands remain identical:
10
+ ```bash
11
+ forge claude # unchanged
12
+ forge codex # unchanged
13
+ forge cursor # unchanged
14
+ forge antigravity # unchanged
15
+ forge aider # unchanged
16
+ ```
17
+
18
+ **New wrappers added**:
19
+ ```bash
20
+ forge opencode # new
21
+ forge commandcode # new
22
+ ```
23
+
24
+ **New commands**: `forge stats`, `forge profile`, `forge explain`, `forge inspect`
25
+
26
+ ### Python API
27
+
28
+ The following internal functions were renamed but backward-compatible aliases exist:
29
+
30
+ - `build_merged_context(repack_context, restart_root)` — new unified entry point
31
+ - `get_merged_context(repo_context)` — still available as deprecated alias
32
+ - `build_behavior_instructions()` — still available as deprecated alias
33
+
34
+ ### Configuration
35
+
36
+ No changes to `forgecli.toml` format. All existing configuration files work without modification.
37
+
38
+ ### Provider System
39
+
40
+ No breaking changes. The same `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, and `GOOGLE_API_KEY` environment variables are used.
@@ -0,0 +1,199 @@
1
+ Metadata-Version: 2.4
2
+ Name: forgeoptimizer
3
+ Version: 1.0.2
4
+ Summary: Forge — AI optimization runtime for Claude Code, Codex, Cursor, Antigravity
5
+ Project-URL: Homepage, https://github.com/mdshzb04/Forge
6
+ Project-URL: Repository, https://github.com/mdshzb04/Forge
7
+ Project-URL: Documentation, https://github.com/mdshzb04/Forge#readme
8
+ Project-URL: Issues, https://github.com/mdshzb04/Forge/issues
9
+ Author: Forge Authors
10
+ License: MIT
11
+ Keywords: ai,claude,cli,codex,cursor,developer-tools
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Software Development
21
+ Requires-Python: >=3.12
22
+ Requires-Dist: aiofiles>=23.2.1
23
+ Requires-Dist: click>=8.1.7
24
+ Requires-Dist: cryptography>=42.0.5
25
+ Requires-Dist: fastapi>=0.100.0
26
+ Requires-Dist: gitpython>=3.1.42
27
+ Requires-Dist: httpx>=0.27.0
28
+ Requires-Dist: keyring>=25.2.0
29
+ Requires-Dist: platformdirs>=4.2.0
30
+ Requires-Dist: pydantic-settings>=2.2.0
31
+ Requires-Dist: pydantic>=2.6.0
32
+ Requires-Dist: pyyaml>=6.0
33
+ Requires-Dist: rich>=13.7.0
34
+ Requires-Dist: tree-sitter-languages>=1.10.0
35
+ Requires-Dist: tree-sitter>=0.21.0
36
+ Requires-Dist: typer>=0.12.0
37
+ Requires-Dist: uvicorn>=0.20.0
38
+ Provides-Extra: dev
39
+ Requires-Dist: build>=1.0.0; extra == 'dev'
40
+ Requires-Dist: mypy>=1.10.0; extra == 'dev'
41
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
42
+ Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
43
+ Requires-Dist: pytest-timeout>=2.3.0; extra == 'dev'
44
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
45
+ Requires-Dist: respx>=0.21.0; extra == 'dev'
46
+ Requires-Dist: ruff>=0.4.0; extra == 'dev'
47
+ Requires-Dist: twine>=5.0.0; extra == 'dev'
48
+ Requires-Dist: types-pyyaml; extra == 'dev'
49
+ Description-Content-Type: text/markdown
50
+
51
+ # Forge
52
+
53
+ <p align="center">
54
+ <a href="https://github.com/mdshzb04/Forge/actions/workflows/ci.yml">
55
+ <img src="https://github.com/mdshzb04/Forge/actions/workflows/ci.yml/badge.svg" alt="CI Status">
56
+ </a>
57
+ <a href="https://pypi.org/project/forgeoptimizer/">
58
+ <img src="https://img.shields.io/pypi/v/forgeoptimizer.svg" alt="PyPI Version">
59
+ </a>
60
+ <a href="https://pypi.org/project/forgeoptimizer/">
61
+ <img src="https://img.shields.io/pypi/pyversions/forgeoptimizer.svg" alt="Supported Python Versions">
62
+ </a>
63
+ <a href="https://github.com/mdshzb04/Forge/blob/main/LICENSE">
64
+ <img src="https://img.shields.io/github/license/mdshzb04/Forge.svg" alt="License: MIT">
65
+ </a>
66
+ <a href="https://github.com/astral-sh/ruff">
67
+ <img src="https://img.shields.io/badge/code%20style-ruff-000000.svg" alt="Code Style: Ruff">
68
+ </a>
69
+ </p>
70
+
71
+ Forge is a pre-launch context preparation tool for AI coding assistants. Before you run `claude`, `codex`, or `cursor`, Forge scans your repository, extracts symbols and dependencies, builds a structured summary, injects configurable behavior instructions, and passes the optimized context to the AI tool through environment variables and MCP tools.
72
+
73
+ ## Core Philosophy
74
+
75
+ > [!IMPORTANT]
76
+ > **Forge optimizes what it controls.**
77
+ >
78
+ > Forge focuses on three areas:
79
+ >
80
+ > - **Repository Intelligence** — Symbol extraction, dependency analysis, file scanning, and native graph generation.
81
+ > - **Behavior Optimization** — Configurable implementation guidance (Ponytail YAGNI rules) and response style optimization (Caveman conciseness rules).
82
+ > - **Runtime Infrastructure** — Zero-configuration wrappers, context caching, background daemon, and MCP server.
83
+ >
84
+ > Forge prepares context before the AI session begins. It does **not** modify provider billing, quota accounting, model pricing, model inference, or the AI client's internal tool selection logic.
85
+
86
+ ## Architecture
87
+
88
+ Forge has a single unified context preparation path used by all wrappers:
89
+
90
+ 1. **Repository scan** — Extracts files, symbols (classes/functions), and dependencies (imports/requires) using parallel regex-based parsers for Python, JS, TS, JSX, and TSX.
91
+ 2. **Semantic ranking** — Ranks files by TF-IDF query relevance with dependency centrality scoring.
92
+ 3. **AST pruning** — Uses tree-sitter to prune files to only relevant symbols, keeping context lean.
93
+ 4. **Behavior injection** — Prepends intensity-gated Ponytail (YAGNI) and Caveman (conciseness) instructions.
94
+ 5. **Compression** — Collapses whitespace, strips boilerplate, and removes redundant content.
95
+ 6. **Caching** — Fingerprints repositories and caches context between launches.
96
+ 7. **Launch** — Sets `FORGE_CONTEXT` env var and starts the AI CLI.
97
+
98
+
99
+ ### Advanced Graph
100
+
101
+ The native builder works out of the box with no extra setup. For the advanced graph (Leiden clustering and LLM-powered analysis), Forge will automatically detect and install the external `graphify` tool and its required provider dependencies when you run the build command.
102
+
103
+ You only need to configure your API key and run the command:
104
+
105
+ ```bash
106
+ # 1. Provide an API key for your provider
107
+ export ANTHROPIC_API_KEY="your-key-here"
108
+
109
+ # 2. Build the graph (Forge automatically manages the graphify installation)
110
+ forge graph build
111
+ ```
112
+
113
+ ## Installation
114
+
115
+ ```bash
116
+ uv tool install forgeoptimizer
117
+ ```
118
+
119
+ The CLI entrypoint is `forge`.
120
+
121
+ ---
122
+
123
+ ## Interfaces
124
+
125
+ Forge provides two ways to connect with your AI coding tools:
126
+
127
+ 1. **Convenience Wrappers** (`forge claude`, `forge cursor`, `forge codex`, `forge antigravity`) — Automatically prepare context, configure MCP, and launch the target AI CLI.
128
+ 2. **MCP Server** (`forge mcp`) — Standard stdio JSON-RPC interface exposing 6 tools that AI clients can call during sessions.
129
+
130
+ ---
131
+
132
+ ## Command Reference
133
+
134
+ | Command | Description |
135
+ | -------- | ----------- |
136
+ | `forge claude` | Launch Claude Code with optimized context |
137
+ | `forge codex` | Launch Codex CLI with optimized context |
138
+ | `forge cursor` | Launch Cursor CLI with optimized context |
139
+ | `forge antigravity` | Launch Antigravity CLI with optimized context |
140
+ | `forge commit` | Generate a Conventional Commit message from staged changes |
141
+ | `forge mcp` | Start the stdio MCP server |
142
+ | `forge start` | Start the background daemon |
143
+ | `forge graph build` | Build a codebase graph (native or external) |
144
+ | `forge config` | Configure optimization profiles |
145
+ | `forge status` | Show repository, daemon, and optimization status |
146
+ | `forge doctor` | Verify installation and dependencies |
147
+ | `forge inspect` | Display active pipeline and optimization stages |
148
+ | `forge stats` | Show cache metrics and pipeline performance |
149
+ | `forge profile` | View or set optimization profiles |
150
+ | `forge explain` | Explain pipeline stages, concepts, or topics |
151
+ | `forge --version` | Show version |
152
+
153
+ Use `--refresh` to bypass the cache on any wrapper command:
154
+ ```bash
155
+ forge claude --refresh
156
+ ```
157
+
158
+ ---
159
+
160
+ ## MCP Tools
161
+
162
+ Forge exposes 6 tools over MCP:
163
+
164
+ * `get_optimized_context` — Full optimized repository context with optional query filtering
165
+ * `get_summary` — Repository layout, file count, and size summary
166
+ * `get_dependency_graph` — Module/file import relationships
167
+ * `file_lookup` — File contents by relative path
168
+ * `symbol_lookup` — Class/function definitions and locations
169
+ * `semantic_search` — Keyword search across codebase chunks
170
+
171
+ > [!IMPORTANT]
172
+ > Forge exposes these tools, but whether they are called depends on the AI client's internal orchestration. Forge does not control tool selection.
173
+
174
+ ---
175
+
176
+ ## Environment Variables
177
+
178
+ | Variable | Purpose |
179
+ | -------- | -------- |
180
+ | `FORGE_CONTEXT` | Optimized pre-launch context text |
181
+ | `FORGE_CONTEXT_FILE` | Path to the cached context file |
182
+ | `FORGE_REPO_ROOT` | Detected repository root |
183
+
184
+ ---
185
+
186
+ ## Development
187
+
188
+ ```bash
189
+ git clone https://github.com/mdshzb04/Forge
190
+ cd Forge
191
+ python -m venv .venv && source .venv/bin/activate
192
+ pip install -e ".[dev]"
193
+ pytest
194
+ ruff check forgecli tests
195
+ ```
196
+
197
+ ## License
198
+
199
+ [MIT](LICENSE)
@@ -0,0 +1,149 @@
1
+ # Forge
2
+
3
+ <p align="center">
4
+ <a href="https://github.com/mdshzb04/Forge/actions/workflows/ci.yml">
5
+ <img src="https://github.com/mdshzb04/Forge/actions/workflows/ci.yml/badge.svg" alt="CI Status">
6
+ </a>
7
+ <a href="https://pypi.org/project/forgeoptimizer/">
8
+ <img src="https://img.shields.io/pypi/v/forgeoptimizer.svg" alt="PyPI Version">
9
+ </a>
10
+ <a href="https://pypi.org/project/forgeoptimizer/">
11
+ <img src="https://img.shields.io/pypi/pyversions/forgeoptimizer.svg" alt="Supported Python Versions">
12
+ </a>
13
+ <a href="https://github.com/mdshzb04/Forge/blob/main/LICENSE">
14
+ <img src="https://img.shields.io/github/license/mdshzb04/Forge.svg" alt="License: MIT">
15
+ </a>
16
+ <a href="https://github.com/astral-sh/ruff">
17
+ <img src="https://img.shields.io/badge/code%20style-ruff-000000.svg" alt="Code Style: Ruff">
18
+ </a>
19
+ </p>
20
+
21
+ Forge is a pre-launch context preparation tool for AI coding assistants. Before you run `claude`, `codex`, or `cursor`, Forge scans your repository, extracts symbols and dependencies, builds a structured summary, injects configurable behavior instructions, and passes the optimized context to the AI tool through environment variables and MCP tools.
22
+
23
+ ## Core Philosophy
24
+
25
+ > [!IMPORTANT]
26
+ > **Forge optimizes what it controls.**
27
+ >
28
+ > Forge focuses on three areas:
29
+ >
30
+ > - **Repository Intelligence** — Symbol extraction, dependency analysis, file scanning, and native graph generation.
31
+ > - **Behavior Optimization** — Configurable implementation guidance (Ponytail YAGNI rules) and response style optimization (Caveman conciseness rules).
32
+ > - **Runtime Infrastructure** — Zero-configuration wrappers, context caching, background daemon, and MCP server.
33
+ >
34
+ > Forge prepares context before the AI session begins. It does **not** modify provider billing, quota accounting, model pricing, model inference, or the AI client's internal tool selection logic.
35
+
36
+ ## Architecture
37
+
38
+ Forge has a single unified context preparation path used by all wrappers:
39
+
40
+ 1. **Repository scan** — Extracts files, symbols (classes/functions), and dependencies (imports/requires) using parallel regex-based parsers for Python, JS, TS, JSX, and TSX.
41
+ 2. **Semantic ranking** — Ranks files by TF-IDF query relevance with dependency centrality scoring.
42
+ 3. **AST pruning** — Uses tree-sitter to prune files to only relevant symbols, keeping context lean.
43
+ 4. **Behavior injection** — Prepends intensity-gated Ponytail (YAGNI) and Caveman (conciseness) instructions.
44
+ 5. **Compression** — Collapses whitespace, strips boilerplate, and removes redundant content.
45
+ 6. **Caching** — Fingerprints repositories and caches context between launches.
46
+ 7. **Launch** — Sets `FORGE_CONTEXT` env var and starts the AI CLI.
47
+
48
+
49
+ ### Advanced Graph
50
+
51
+ The native builder works out of the box with no extra setup. For the advanced graph (Leiden clustering and LLM-powered analysis), Forge will automatically detect and install the external `graphify` tool and its required provider dependencies when you run the build command.
52
+
53
+ You only need to configure your API key and run the command:
54
+
55
+ ```bash
56
+ # 1. Provide an API key for your provider
57
+ export ANTHROPIC_API_KEY="your-key-here"
58
+
59
+ # 2. Build the graph (Forge automatically manages the graphify installation)
60
+ forge graph build
61
+ ```
62
+
63
+ ## Installation
64
+
65
+ ```bash
66
+ uv tool install forgeoptimizer
67
+ ```
68
+
69
+ The CLI entrypoint is `forge`.
70
+
71
+ ---
72
+
73
+ ## Interfaces
74
+
75
+ Forge provides two ways to connect with your AI coding tools:
76
+
77
+ 1. **Convenience Wrappers** (`forge claude`, `forge cursor`, `forge codex`, `forge antigravity`) — Automatically prepare context, configure MCP, and launch the target AI CLI.
78
+ 2. **MCP Server** (`forge mcp`) — Standard stdio JSON-RPC interface exposing 6 tools that AI clients can call during sessions.
79
+
80
+ ---
81
+
82
+ ## Command Reference
83
+
84
+ | Command | Description |
85
+ | -------- | ----------- |
86
+ | `forge claude` | Launch Claude Code with optimized context |
87
+ | `forge codex` | Launch Codex CLI with optimized context |
88
+ | `forge cursor` | Launch Cursor CLI with optimized context |
89
+ | `forge antigravity` | Launch Antigravity CLI with optimized context |
90
+ | `forge commit` | Generate a Conventional Commit message from staged changes |
91
+ | `forge mcp` | Start the stdio MCP server |
92
+ | `forge start` | Start the background daemon |
93
+ | `forge graph build` | Build a codebase graph (native or external) |
94
+ | `forge config` | Configure optimization profiles |
95
+ | `forge status` | Show repository, daemon, and optimization status |
96
+ | `forge doctor` | Verify installation and dependencies |
97
+ | `forge inspect` | Display active pipeline and optimization stages |
98
+ | `forge stats` | Show cache metrics and pipeline performance |
99
+ | `forge profile` | View or set optimization profiles |
100
+ | `forge explain` | Explain pipeline stages, concepts, or topics |
101
+ | `forge --version` | Show version |
102
+
103
+ Use `--refresh` to bypass the cache on any wrapper command:
104
+ ```bash
105
+ forge claude --refresh
106
+ ```
107
+
108
+ ---
109
+
110
+ ## MCP Tools
111
+
112
+ Forge exposes 6 tools over MCP:
113
+
114
+ * `get_optimized_context` — Full optimized repository context with optional query filtering
115
+ * `get_summary` — Repository layout, file count, and size summary
116
+ * `get_dependency_graph` — Module/file import relationships
117
+ * `file_lookup` — File contents by relative path
118
+ * `symbol_lookup` — Class/function definitions and locations
119
+ * `semantic_search` — Keyword search across codebase chunks
120
+
121
+ > [!IMPORTANT]
122
+ > Forge exposes these tools, but whether they are called depends on the AI client's internal orchestration. Forge does not control tool selection.
123
+
124
+ ---
125
+
126
+ ## Environment Variables
127
+
128
+ | Variable | Purpose |
129
+ | -------- | -------- |
130
+ | `FORGE_CONTEXT` | Optimized pre-launch context text |
131
+ | `FORGE_CONTEXT_FILE` | Path to the cached context file |
132
+ | `FORGE_REPO_ROOT` | Detected repository root |
133
+
134
+ ---
135
+
136
+ ## Development
137
+
138
+ ```bash
139
+ git clone https://github.com/mdshzb04/Forge
140
+ cd Forge
141
+ python -m venv .venv && source .venv/bin/activate
142
+ pip install -e ".[dev]"
143
+ pytest
144
+ ruff check forgecli tests
145
+ ```
146
+
147
+ ## License
148
+
149
+ [MIT](LICENSE)
@@ -0,0 +1,52 @@
1
+ # Forge v1.0.0 Release Notes
2
+
3
+ ## Overview
4
+
5
+ Forge v1.0.0 is the first production release of the Forge AI optimization runtime. Forge prepares optimized repository-aware context for AI coding assistants, reducing token usage and improving response quality through prompt engineering, output optimization, and intelligent context retrieval.
6
+
7
+ ## What's New
8
+
9
+ Forge provides a complete developer experience:
10
+
11
+ ```
12
+ forge claude # Launch Claude Code with optimized context
13
+ forge codex # Launch Codex CLI
14
+ forge cursor # Launch Cursor CLI
15
+ forge antigravity # Launch Antigravity CLI
16
+ forge aider # Launch Aider with context injection
17
+ forge opencode # Launch OpenCode
18
+ forge commandcode # Launch CommandCode
19
+
20
+ forge start # Start the background daemon
21
+ forge mcp # Start the MCP server over stdio
22
+ forge graph build # Build a knowledge graph
23
+
24
+ forge config # Configure optimization profiles
25
+ forge profile # View/set profiles with rich output
26
+ forge status # Repository and daemon status
27
+ forge stats # Usage statistics
28
+ forge doctor # System diagnostics
29
+ forge inspect # Pipeline and providers
30
+ forge explain # Explain pipeline stages and concepts
31
+ ```
32
+
33
+ ## Key Capabilities
34
+
35
+ - **19-stage middleware pipeline** processes every AI request through telemetry, auth, policy, caching, history compression, token planning, context optimization, conversation tracking, Ponytail prompt engineering, Caveman output compression, repository scanning, dependency analysis, symbol extraction, graph enrichment, semantic ranking, streaming, resilience, provider execution, and response optimization.
36
+ - **7 AI CLI wrappers** unified through a single runtime path.
37
+ - **16 providers** with real HTTP drivers for OpenAI, Anthropic, and Google Gemini.
38
+ - **Knowledge graph** integration for intelligent file context injection.
39
+ - **Optimization profiles** with 4-5 intensity levels per optimizer.
40
+
41
+ ## Installation
42
+
43
+ ```bash
44
+ pip install forgeoptimizer
45
+ # or
46
+ uv tool install forgeoptimizer
47
+ ```
48
+
49
+ ## What's Next
50
+
51
+ - Performance profiling and optimization of 19-stage pipeline under production load
52
+ - Standalone binary packaging (PyInstaller/Nuitka)
@@ -0,0 +1,42 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ | Version | Supported |
6
+ |---------|-----------|
7
+ | 1.0.x | ✅ Yes |
8
+ | < 1.0 | ❌ No |
9
+
10
+ ## Reporting a Vulnerability
11
+
12
+ If you discover a security vulnerability in Forge, please do **not** open a public GitHub issue.
13
+
14
+ Instead, email the maintainers directly. We will respond within 48 hours and work with you on a coordinated disclosure timeline.
15
+
16
+ ## Security Design
17
+
18
+ ### API Keys
19
+
20
+ Forge stores API keys in two ways:
21
+ 1. **Environment variables** (recommended): `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_API_KEY`, etc.
22
+ 2. **System keyring** (optional): Forge can store credentials in your OS keychain via the `keyring` library.
23
+
24
+ Forge never writes API keys to log files, configuration files, or cache directories.
25
+
26
+ ### Subprocess Execution
27
+
28
+ Wrapper commands (`forge claude`, `forge codex`, etc.) launch external CLI binaries via `subprocess.run()` with arguments passed as a list — never through `shell=True`. This prevents command injection.
29
+
30
+ ### Dependency Verification
31
+
32
+ All dependencies are pinned and sourced from PyPI. We do not include vendored dependencies. The CI pipeline verifies package integrity through `twine check` before publishing.
33
+
34
+ ## Security Checks
35
+
36
+ Run `forge doctor` to check your installation's security posture, including:
37
+ - Which provider API keys are configured
38
+ - Configuration file integrity
39
+
40
+ ## Disclosure Timeline
41
+
42
+ We aim to fix confirmed vulnerabilities within 7 days and release a patch. Critical vulnerabilities may receive same-day patches.