forgeoptimizer 1.0.0__py3-none-any.whl

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 (156) hide show
  1. forgecli/__init__.py +4 -0
  2. forgecli/build/__init__.py +135 -0
  3. forgecli/build/apply.py +218 -0
  4. forgecli/build/caveman_optimize.py +37 -0
  5. forgecli/build/diff_extract.py +218 -0
  6. forgecli/build/llm.py +167 -0
  7. forgecli/build/optimize.py +37 -0
  8. forgecli/build/pipeline.py +76 -0
  9. forgecli/build/retrieval.py +157 -0
  10. forgecli/build/summarize.py +76 -0
  11. forgecli/build/test_run.py +75 -0
  12. forgecli/builder/__init__.py +11 -0
  13. forgecli/builder/builder.py +53 -0
  14. forgecli/builder/editor.py +36 -0
  15. forgecli/builder/formatter.py +31 -0
  16. forgecli/cli/__init__.py +5 -0
  17. forgecli/cli/bootstrap.py +281 -0
  18. forgecli/cli/commands_graph.py +137 -0
  19. forgecli/cli/commands_wrappers.py +63 -0
  20. forgecli/cli/main.py +122 -0
  21. forgecli/cli/ui.py +56 -0
  22. forgecli/config/__init__.py +28 -0
  23. forgecli/config/loader.py +85 -0
  24. forgecli/config/settings.py +204 -0
  25. forgecli/config/writer.py +90 -0
  26. forgecli/core/__init__.py +35 -0
  27. forgecli/core/container.py +68 -0
  28. forgecli/core/context.py +54 -0
  29. forgecli/core/credentials.py +114 -0
  30. forgecli/core/errors.py +27 -0
  31. forgecli/core/events.py +67 -0
  32. forgecli/core/logging.py +47 -0
  33. forgecli/core/models.py +159 -0
  34. forgecli/core/plugins.py +56 -0
  35. forgecli/core/service.py +22 -0
  36. forgecli/docs/__init__.py +5 -0
  37. forgecli/docs/generator.py +119 -0
  38. forgecli/engine/__init__.py +105 -0
  39. forgecli/engine/context.py +171 -0
  40. forgecli/engine/defaults.py +89 -0
  41. forgecli/engine/events.py +185 -0
  42. forgecli/engine/execution.py +526 -0
  43. forgecli/engine/plugins.py +146 -0
  44. forgecli/engine/runner.py +155 -0
  45. forgecli/engine/stages/__init__.py +33 -0
  46. forgecli/engine/stages/caveman_optimizer.py +47 -0
  47. forgecli/engine/stages/context_optimizer.py +44 -0
  48. forgecli/engine/stages/execution_engine_stage.py +108 -0
  49. forgecli/engine/stages/git_engine.py +30 -0
  50. forgecli/engine/stages/intent_analyzer.py +38 -0
  51. forgecli/engine/stages/model_router.py +66 -0
  52. forgecli/engine/stages/planning_engine.py +45 -0
  53. forgecli/engine/stages/repository_analyzer.py +54 -0
  54. forgecli/engine/stages/validation_engine.py +89 -0
  55. forgecli/git/__init__.py +9 -0
  56. forgecli/git/repo.py +55 -0
  57. forgecli/git/service.py +45 -0
  58. forgecli/graph/__init__.py +56 -0
  59. forgecli/graph/backend_graphify.py +453 -0
  60. forgecli/graph/edge.py +19 -0
  61. forgecli/graph/graph.py +85 -0
  62. forgecli/graph/graphify.py +412 -0
  63. forgecli/graph/indexer.py +82 -0
  64. forgecli/graph/node.py +47 -0
  65. forgecli/graph/repository.py +164 -0
  66. forgecli/memory/__init__.py +12 -0
  67. forgecli/memory/cache.py +61 -0
  68. forgecli/memory/history.py +138 -0
  69. forgecli/memory/store.py +87 -0
  70. forgecli/optimizer/__init__.py +14 -0
  71. forgecli/optimizer/caveman/__init__.py +173 -0
  72. forgecli/optimizer/caveman/cli.py +64 -0
  73. forgecli/optimizer/caveman/decorator.py +67 -0
  74. forgecli/optimizer/caveman/factory.py +51 -0
  75. forgecli/optimizer/caveman/ruleset.py +156 -0
  76. forgecli/optimizer/caveman/state.py +52 -0
  77. forgecli/optimizer/chunker.py +85 -0
  78. forgecli/optimizer/optimizer.py +81 -0
  79. forgecli/optimizer/ponytail/__init__.py +183 -0
  80. forgecli/optimizer/ponytail/cli.py +168 -0
  81. forgecli/optimizer/ponytail/decorator.py +70 -0
  82. forgecli/optimizer/ponytail/factory.py +51 -0
  83. forgecli/optimizer/ponytail/ruleset.py +168 -0
  84. forgecli/optimizer/ponytail/state.py +53 -0
  85. forgecli/optimizer/ranker.py +37 -0
  86. forgecli/optimizer/summarizer.py +44 -0
  87. forgecli/orchestrator/__init__.py +707 -0
  88. forgecli/planner/__init__.py +56 -0
  89. forgecli/planner/agent.py +61 -0
  90. forgecli/planner/plan.py +65 -0
  91. forgecli/planner/planner.py +17 -0
  92. forgecli/planner/render.py +271 -0
  93. forgecli/planner/serialize.py +106 -0
  94. forgecli/planner/software.py +834 -0
  95. forgecli/platform/__init__.py +91 -0
  96. forgecli/platform/core.py +201 -0
  97. forgecli/platform/deps.py +354 -0
  98. forgecli/platform/paths.py +236 -0
  99. forgecli/platform/shell.py +176 -0
  100. forgecli/platform/update.py +252 -0
  101. forgecli/plugins/__init__.py +251 -0
  102. forgecli/prompts/__init__.py +11 -0
  103. forgecli/prompts/loader.py +28 -0
  104. forgecli/prompts/registry.py +32 -0
  105. forgecli/prompts/renderer.py +23 -0
  106. forgecli/providers/__init__.py +39 -0
  107. forgecli/providers/anthropic.py +206 -0
  108. forgecli/providers/base.py +206 -0
  109. forgecli/providers/builtin.py +26 -0
  110. forgecli/providers/conversation.py +78 -0
  111. forgecli/providers/google.py +295 -0
  112. forgecli/providers/http_base.py +211 -0
  113. forgecli/providers/mock.py +113 -0
  114. forgecli/providers/openai.py +202 -0
  115. forgecli/providers/openai_compatible.py +728 -0
  116. forgecli/providers/router.py +345 -0
  117. forgecli/providers/router_state.py +89 -0
  118. forgecli/review/__init__.py +45 -0
  119. forgecli/review/analyzer.py +124 -0
  120. forgecli/review/analyzers/__init__.py +1 -0
  121. forgecli/review/analyzers/architecture.py +258 -0
  122. forgecli/review/analyzers/complexity.py +167 -0
  123. forgecli/review/analyzers/dead_code.py +262 -0
  124. forgecli/review/analyzers/duplicates.py +163 -0
  125. forgecli/review/analyzers/performance.py +165 -0
  126. forgecli/review/analyzers/security.py +251 -0
  127. forgecli/review/finding.py +68 -0
  128. forgecli/review/report.py +311 -0
  129. forgecli/review/repository.py +131 -0
  130. forgecli/review/suggestions.py +98 -0
  131. forgecli/runtime/__init__.py +6 -0
  132. forgecli/runtime/cache_store.py +77 -0
  133. forgecli/runtime/prepare.py +199 -0
  134. forgecli/runtime/wrappers.py +152 -0
  135. forgecli/sdk/__init__.py +132 -0
  136. forgecli/sdk/events.py +206 -0
  137. forgecli/sdk/interfaces.py +282 -0
  138. forgecli/sdk/loader.py +243 -0
  139. forgecli/sdk/manager.py +693 -0
  140. forgecli/sdk/manifest.py +397 -0
  141. forgecli/sdk/sandbox.py +197 -0
  142. forgecli/sdk/version.py +316 -0
  143. forgecli/templates/__init__.py +9 -0
  144. forgecli/templates/engine.py +37 -0
  145. forgecli/templates/registry.py +32 -0
  146. forgecli/utils/__init__.py +19 -0
  147. forgecli/utils/fs.py +91 -0
  148. forgecli/utils/ids.py +11 -0
  149. forgecli/utils/io.py +27 -0
  150. forgecli/utils/paths.py +70 -0
  151. forgecli/utils/timing.py +25 -0
  152. forgeoptimizer-1.0.0.dist-info/METADATA +169 -0
  153. forgeoptimizer-1.0.0.dist-info/RECORD +156 -0
  154. forgeoptimizer-1.0.0.dist-info/WHEEL +4 -0
  155. forgeoptimizer-1.0.0.dist-info/entry_points.txt +2 -0
  156. forgeoptimizer-1.0.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,169 @@
1
+ Metadata-Version: 2.4
2
+ Name: forgeoptimizer
3
+ Version: 1.0.0
4
+ Summary: Forge — AI optimization runtime. Fast prompt and token optimization for Claude Code, Codex, Cursor, OpenCode, and CommandCode CLI.
5
+ Project-URL: Homepage, https://github.com/mdshzb04/ForgeCli
6
+ Project-URL: Repository, https://github.com/mdshzb04/ForgeCli
7
+ Project-URL: Documentation, https://github.com/mdshzb04/ForgeCli#readme
8
+ Project-URL: Issues, https://github.com/mdshzb04/ForgeCli/issues
9
+ Author: Forge Authors
10
+ License: MIT License
11
+
12
+ Copyright (c) 2025 Forge Authors
13
+
14
+ Permission is hereby granted, free of charge, to any person obtaining a copy
15
+ of this software and associated documentation files (the "Software"), to deal
16
+ in the Software without restriction, including without limitation the rights
17
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18
+ copies of the Software, and to permit persons to whom the Software is
19
+ furnished to do so, subject to the following conditions:
20
+
21
+ The above copyright notice and this permission notice shall be included in all
22
+ copies or substantial portions of the Software.
23
+
24
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
+ SOFTWARE.
31
+ License-File: LICENSE
32
+ Keywords: ai,claude,cli,codex,cursor,developer-tools
33
+ Classifier: Development Status :: 5 - Production/Stable
34
+ Classifier: Environment :: Console
35
+ Classifier: Intended Audience :: Developers
36
+ Classifier: License :: OSI Approved :: MIT License
37
+ Classifier: Operating System :: OS Independent
38
+ Classifier: Programming Language :: Python :: 3
39
+ Classifier: Programming Language :: Python :: 3.12
40
+ Classifier: Programming Language :: Python :: 3.13
41
+ Classifier: Topic :: Software Development
42
+ Requires-Python: >=3.12
43
+ Requires-Dist: aiofiles>=23.2.1
44
+ Requires-Dist: click>=8.1.7
45
+ Requires-Dist: cryptography>=42.0.5
46
+ Requires-Dist: gitpython>=3.1.42
47
+ Requires-Dist: httpx>=0.27.0
48
+ Requires-Dist: keyring>=25.2.0
49
+ Requires-Dist: platformdirs>=4.2.0
50
+ Requires-Dist: pydantic-settings>=2.2.0
51
+ Requires-Dist: pydantic>=2.6.0
52
+ Requires-Dist: pyyaml>=6.0
53
+ Requires-Dist: rich>=13.7.0
54
+ Requires-Dist: tree-sitter-languages>=1.10.0
55
+ Requires-Dist: tree-sitter>=0.21.0
56
+ Requires-Dist: typer>=0.12.0
57
+ Provides-Extra: dev
58
+ Requires-Dist: build>=1.0.0; extra == 'dev'
59
+ Requires-Dist: mypy>=1.10.0; extra == 'dev'
60
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
61
+ Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
62
+ Requires-Dist: pytest-timeout>=2.3.0; extra == 'dev'
63
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
64
+ Requires-Dist: respx>=0.21.0; extra == 'dev'
65
+ Requires-Dist: ruff>=0.4.0; extra == 'dev'
66
+ Requires-Dist: twine>=5.0.0; extra == 'dev'
67
+ Requires-Dist: types-pyyaml; extra == 'dev'
68
+ Description-Content-Type: text/markdown
69
+
70
+ # Forge
71
+
72
+ Forge is an AI optimization runtime. It prepares your repository context at light speed — prompt optimization and token compression — then launches the AI CLI you already use.
73
+
74
+ Install:
75
+
76
+ ```bash
77
+ uv tool install forgectx
78
+ ```
79
+
80
+ The command is `forge`.
81
+
82
+ ## What it does
83
+
84
+ When you run `forge claude`, `forge codex`, `forge cursor`, `forge opencode`, or `forge commandcode`, Forge:
85
+
86
+ 1. Detects your git repository (or current directory)
87
+ 2. Builds a **shallow** repo snapshot — it does **not** index your whole codebase
88
+ 3. Runs prompt optimization (Ponytail ruleset) and token compression
89
+ 4. Reuses cached results when nothing important changed
90
+ 5. Launches the selected CLI with `FORGE_CONTEXT` and `FORGE_CONTEXT_FILE` set
91
+
92
+ Wrappers feel instant because Forge skips full graph builds during normal use.
93
+
94
+ ## Commands
95
+
96
+ | Command | Description |
97
+ | -------- | ------------ |
98
+ | `forge claude` | Launch Claude Code with optimized context |
99
+ | `forge codex` | Launch Codex CLI with optimized context |
100
+ | `forge cursor` | Launch Cursor CLI with optimized context |
101
+ | `forge opencode` | Launch OpenCode CLI with optimized context |
102
+ | `forge commandcode` | Launch CommandCode CLI with optimized context |
103
+ | `forge graph build` | Optionally build a full knowledge graph via Graphify |
104
+ | `forge --version` | Show version |
105
+
106
+ Pass through any flags your CLI supports:
107
+
108
+ ```bash
109
+ forge claude -- "fix the failing test in tests/test_foo.py"
110
+ forge codex --help
111
+ forge cursor --refresh
112
+ ```
113
+
114
+ Use `--refresh` to bypass Forge's context cache.
115
+
116
+ ## Optional: knowledge graph
117
+
118
+ If you want a full codebase knowledge graph (separate from the fast wrapper path):
119
+
120
+ ```bash
121
+ uv tool install graphifyy
122
+ forge graph build
123
+ ```
124
+
125
+ Graphify runs only when you ask for it — not on every `forge claude` / `codex` / `cursor` invocation.
126
+
127
+ ## Environment variables
128
+
129
+ Wrappers export:
130
+
131
+ | Variable | Purpose |
132
+ | -------- | -------- |
133
+ | `FORGE_CONTEXT` | Optimized text context |
134
+ | `FORGE_CONTEXT_FILE` | Path to the optimized context file |
135
+ | `FORGE_REPO_ROOT` | Detected repository root |
136
+
137
+ ## Development
138
+
139
+ ```bash
140
+ git clone https://github.com/mdshzb04/ForgeCli
141
+ cd ForgeCli
142
+ python -m venv .venv && source .venv/bin/activate
143
+ pip install -e ".[dev]"
144
+ pytest
145
+ ruff check forgecli tests
146
+ ```
147
+
148
+ ## Release
149
+
150
+ Push a version tag to publish to TestPyPI and PyPI:
151
+
152
+ ```bash
153
+ git tag v1.0.0
154
+ git push origin v1.0.0
155
+ ```
156
+
157
+ Publish jobs run **only on `v*` tags**. On regular pushes to `main`, those jobs show as **Skipped** — that is expected, not a failure.
158
+
159
+ Configure GitHub environments `testpypi` and `pypi` with PyPI trusted publishing for package name `forgectx`.
160
+
161
+ ---
162
+
163
+ <img width="1854" height="1005" alt="image" src="https://github.com/user-attachments/assets/03f3c2e2-424c-4784-8a59-b2b0f4b99447" />
164
+
165
+ <img width="1854" height="1005" alt="image" src="https://github.com/user-attachments/assets/6eb06d10-6f1f-4648-b679-028368362c24" />
166
+
167
+ ## License
168
+
169
+ [MIT](LICENSE)
@@ -0,0 +1,156 @@
1
+ forgecli/__init__.py,sha256=_2prkAVTuGlcIuORJh0z0vALDMCkA_Oa0_tJNyqgJ1w,87
2
+ forgecli/build/__init__.py,sha256=nCsFRQ7Fk6XUPZFNmjxOi5Mxly89AiZE1zH11yaXvUM,3998
3
+ forgecli/build/apply.py,sha256=4tUwOdYSl5eVcoKHa2QFzfCZu4oJytgtHPIg0zsKUpo,7156
4
+ forgecli/build/caveman_optimize.py,sha256=_Ry1cEzAmAGNqPgWPtEy8VWIqCBFBHxi4W8SW7-sTmk,1442
5
+ forgecli/build/diff_extract.py,sha256=Pft7nFjCSn4I8IucQMZuIclpnqmtSKIJbV8pDog_kQ4,7713
6
+ forgecli/build/llm.py,sha256=sPoaEOCBrkDXx-UNfCMwgRqgwCGIbtuNwGD_-bfeHrc,5958
7
+ forgecli/build/optimize.py,sha256=qgaAClaCcULSzO6JvGkNV8dl5VSx_eXUuhvjApNk2ew,1342
8
+ forgecli/build/pipeline.py,sha256=KzSBspZtsbsiwoh_TXGPci6Y0Z03jlew2mEQInqAGZU,2484
9
+ forgecli/build/retrieval.py,sha256=Uh8-0DWoJUx1ORChIPA_wa2BNI3m9EohaKLrjLRtShA,4622
10
+ forgecli/build/summarize.py,sha256=zW3xTL-5dOypr8daN1WVfDSGNSw-1j-e5DsobZeoJ4E,2574
11
+ forgecli/build/test_run.py,sha256=WzboaYrfzhLJ5wym-K1kkc9C7hdRa13olU_dVXQnMmo,2200
12
+ forgecli/builder/__init__.py,sha256=SEFEtlumPsziNHHFAt85CI8QdroxOlGFjViA0t4lDxI,260
13
+ forgecli/builder/builder.py,sha256=HAOv8nhUjjHe83WryYETwOjGeDlnZdYGg2MuF9KxZYM,1456
14
+ forgecli/builder/editor.py,sha256=J1NOFFJ_n5KgzS9zGbGOY5SGSWUO43wsX6Y9vzcHE7I,919
15
+ forgecli/builder/formatter.py,sha256=A2ty_Gn9ZwW_v2Y-JsdTa0orQ-4GMlExKdpc7sj94dU,848
16
+ forgecli/cli/__init__.py,sha256=qWTHdenUK0k_M-W6uZXuQKHeXje1F8qolRUxNYrtyEQ,97
17
+ forgecli/cli/bootstrap.py,sha256=qwEHA0sO485LeotuRdEJ7ZCwDaW5eGEX7bU4bYyyNiA,9653
18
+ forgecli/cli/commands_graph.py,sha256=4pAbRzkRtbHbfBIOZhq-JRrK557LQ4AY602Qc-OQ11c,4449
19
+ forgecli/cli/commands_wrappers.py,sha256=zzZxfM5RPDNmoUIxFX6fefnj7Hy4IUNG2psb05p_6f4,2317
20
+ forgecli/cli/main.py,sha256=exUeMnzAKGTZ_5KjpAGZbypDY8bkcJOxHC2f9amO1bA,3862
21
+ forgecli/cli/ui.py,sha256=kI4wjdnP-_hkmxiQqv0nyrdSOe79DYJ5vGKE9OuLEfo,1457
22
+ forgecli/config/__init__.py,sha256=VHjyEkDdIwIyq0WuD2WV_f9cE0ZxE3SJacrr7QHxQKY,766
23
+ forgecli/config/loader.py,sha256=hCOOY0XIWNjzSRuKYFB3SoD3d4KEMCRlxDHgZFP55X8,3109
24
+ forgecli/config/settings.py,sha256=5saEjEcs8fD25tTHA9lr62cVuoBE1PsgNmX4wSH9GtU,5777
25
+ forgecli/config/writer.py,sha256=IUst_UDgQyGEdkwzml03hVZfNLHoczFMkwdAAHmipcE,3115
26
+ forgecli/core/__init__.py,sha256=IJ9zeHVxA6ZYrszuWJO1NzvyfgJcdmx6Q0Z4IUbJ9mo,852
27
+ forgecli/core/container.py,sha256=Wbxl9hO1q4jw8Nbwt1jzorNSTHem0Oh_QHLEPuovnzU,2494
28
+ forgecli/core/context.py,sha256=W97kjPovcPdbJQv8q43XWp2ypIkLI9lldhBSX_u9CF0,1814
29
+ forgecli/core/credentials.py,sha256=JjI_I5vDqgj2FoRKLjHtIyElL77xXhOv0M6XJ83sHKI,3215
30
+ forgecli/core/errors.py,sha256=rjwUEVA-Od3llf9LcWLXe1NLuMSMUKZJPtkzHcvRUKM,689
31
+ forgecli/core/events.py,sha256=Hi4EVUcG5Km4_Z6jRY_hln0rvemkjh0cbQR0kJccUU8,2521
32
+ forgecli/core/logging.py,sha256=rhOhU5q9vPAxcX-7nt2IWI1plYPBTNzsABu3WvAvPEc,1390
33
+ forgecli/core/models.py,sha256=_ZEOS3uVo22_fzpxOfNrWDKTJ-DVseYV_sLSlWxEoIk,10027
34
+ forgecli/core/plugins.py,sha256=i7zb9ayUs2HIr3CRdEXBSgpht8MyKfRxf-1HqEn2mgI,1814
35
+ forgecli/core/service.py,sha256=Jr-91BfdyAxauk0bOypU6NRDgW7_RU0VOYiMZrPJ9_M,693
36
+ forgecli/docs/__init__.py,sha256=1TQsopiZP_tC4_6QgZ64tMBCfkYdQ960lQZAJnd4SkU,124
37
+ forgecli/docs/generator.py,sha256=onnfpQQolfl6W1npTpfcWL7hGl83YmAfbn9neJamSww,4285
38
+ forgecli/engine/__init__.py,sha256=a1qjkKBgacYhLMTWSpy_Jo6ScMNiY9GNdYyN05VVb7E,2723
39
+ forgecli/engine/context.py,sha256=ni9VObwnvYs9wKxCmNPVLOMl6jJJNXm7EEyAl5gjobo,5350
40
+ forgecli/engine/defaults.py,sha256=obnDakOBycUDo0ocZgm3OVwm9IX3d_qOTcmYxe6nLMw,2931
41
+ forgecli/engine/events.py,sha256=P_5YGqZcRY980iPDjaq2xV_mzJh2nutAWLOIJmYoqt4,5840
42
+ forgecli/engine/execution.py,sha256=DjYp-jpedn30_Lhh8DEK-5eElRrsY5COlyrlo50KYZg,16605
43
+ forgecli/engine/plugins.py,sha256=YKGQaJ6_UEVu_oQdZa2EFTADckVWqnwQQwAS-hCXDnI,4545
44
+ forgecli/engine/runner.py,sha256=MO22G1mImiwAmAJW8SrsNgZfGuthJsUG_qWl30473Io,5410
45
+ forgecli/engine/stages/__init__.py,sha256=HKfqPiVrJY7tv6cVVuOfBV0gdZL-VmSzxJJ8htL13fE,1373
46
+ forgecli/engine/stages/caveman_optimizer.py,sha256=rHO6xJh4q8_kBMm1qVzhmx0LXqXyXAJvHXhBMizfxLk,1647
47
+ forgecli/engine/stages/context_optimizer.py,sha256=O-Q3EhwMhSw5-zHZPbysFRak8hxK-qwn8I-tlOFfN5I,1457
48
+ forgecli/engine/stages/execution_engine_stage.py,sha256=I_2gPL1GcAaf7-weW56zDlTbK4LfRjDYOsy2h8AiOeE,4024
49
+ forgecli/engine/stages/git_engine.py,sha256=BrBE89V8e-AmTPPDJg-QKELSgcYAZ4jnAOuPg881MfE,877
50
+ forgecli/engine/stages/intent_analyzer.py,sha256=whjqOl-_jo_vax0HmiBgzxaD_ue5-a0i0wGtUY6WsyI,1324
51
+ forgecli/engine/stages/model_router.py,sha256=oBklrPUNzYV6zJyMppa8WUwufBqZ4p3GWgoFBh0IgJU,2220
52
+ forgecli/engine/stages/planning_engine.py,sha256=J7pVN5jgx7hGlDylAtLXzqfFDJ76MNnrBFfWqxfatoM,1478
53
+ forgecli/engine/stages/repository_analyzer.py,sha256=Vu9kaaigOXB2Drea5wCppTq_7cNoIrBOl-Uk0KhwZMw,1842
54
+ forgecli/engine/stages/validation_engine.py,sha256=4Iov_GuDNKVMWjuYOkKFKhQRq165Ve58S-I6BG2XU1w,3363
55
+ forgecli/git/__init__.py,sha256=YSr-vvYZspcADVgTLbV80Hwap5XKMSiIfkXnK-M_vaM,185
56
+ forgecli/git/repo.py,sha256=UNPncjPrToGkL2_VDaUsJ2OQ3sNncVnXihg14zj5JjQ,1536
57
+ forgecli/git/service.py,sha256=0JVll8910JANFVdr3sgnpK1aKjoNlcLVfLeNvm4Xd1w,1251
58
+ forgecli/graph/__init__.py,sha256=8bsg-nMEBgmwz_pdthKYy2YNzdZNH_T2ViQxf-lO8js,1393
59
+ forgecli/graph/backend_graphify.py,sha256=rbo2_jAAGseOkJxvec4qVogqE8KXytp-BB3m15Jpem0,15496
60
+ forgecli/graph/edge.py,sha256=s7AHRen_FYqm1uckUGcZ7SFFzxHZs-0VsuDTyBviiMo,400
61
+ forgecli/graph/graph.py,sha256=fw7x-BdwmPL5oxj56RBPyWeDlE7c0UvoAIQSPsh7jfQ,2925
62
+ forgecli/graph/graphify.py,sha256=rmvDFuwRYPsKoIpvdKuR72UlV0tfIm25cpIIMiTdK8A,13285
63
+ forgecli/graph/indexer.py,sha256=dIEyGKtNaU13I6DjEJ-bgGjXQ3aSB8WxEirCLIP31TI,2595
64
+ forgecli/graph/node.py,sha256=lyWHsFwWfPUjcp7gBeYTo_nRrpNhUzbjrcOeYldkcdM,1045
65
+ forgecli/graph/repository.py,sha256=c-CGdV-7sxeZ3-mANxHkgjg-ZTsOmjZx_iw8svWo3yI,4833
66
+ forgecli/memory/__init__.py,sha256=GCoYrZazysef6LlEWYogmdL4RY5fDBSODVmGqEf4XKw,301
67
+ forgecli/memory/cache.py,sha256=phYGgj4_2f9uPeHTNbbsb_LsCK3TC3sCtY7tieGYzEM,1776
68
+ forgecli/memory/history.py,sha256=hX3Rx-DjANE6ahy3LOat_KROPTmDZfQ_7EP9ANDSsnI,4210
69
+ forgecli/memory/store.py,sha256=kcwS4He4ee5C7I1cENk1p6mJytz1PkD5LT1PJFStOYQ,2696
70
+ forgecli/optimizer/__init__.py,sha256=09yaucBJ613VX_hTPoWnP75w-T7-UJyvFZxgj6MmMdA,373
71
+ forgecli/optimizer/chunker.py,sha256=9Kv-wby8GLxrSLDo0UcrW6DEDcGn9erj49YHJ_qyhQg,2358
72
+ forgecli/optimizer/optimizer.py,sha256=EeUJh3eQHJMpytShEPqxLESxFN_5xPK9pMMbumWVuG4,2363
73
+ forgecli/optimizer/ranker.py,sha256=FWs21UctWstLJNXAwFak68fVcb4eA5o0EqZpTc7BmOw,1301
74
+ forgecli/optimizer/summarizer.py,sha256=PoqzTmHZNp0NVrfRyboda9HOBW6O5Z_q48zGw_zIk_g,1515
75
+ forgecli/optimizer/caveman/__init__.py,sha256=WgqqpTnLvtv_Rj6aGuh88P9AbZAlE_wIiujI2K1z0WA,5945
76
+ forgecli/optimizer/caveman/cli.py,sha256=wEk96vq2PrgtMG4mfsm5_1DcODV6TVD6BsJG0qu3Few,1990
77
+ forgecli/optimizer/caveman/decorator.py,sha256=yIM2wZcD3ZxfkuR-LqSxW_4Lo5QEpYg0S9MByit5pZc,1989
78
+ forgecli/optimizer/caveman/factory.py,sha256=rTLo7rQfHawdcXAcLgF3YohKqtREZ3c3Yq3KLmPp0Rs,1593
79
+ forgecli/optimizer/caveman/ruleset.py,sha256=Xs10HADmR2enj5pI6hL-tUOu-5ejmJl8u4ybgmHELTM,6057
80
+ forgecli/optimizer/caveman/state.py,sha256=Auiu2M4lqDxa_CJ7I4gzrv-1EQfA9pwktrDoBP-92TM,1705
81
+ forgecli/optimizer/ponytail/__init__.py,sha256=ne7QmS31IdvEac7F4YrZcOk5bn3a3HjIRycYwz2GQaE,6114
82
+ forgecli/optimizer/ponytail/cli.py,sha256=GUVjuIDkMNDrwYY_hF1f18co6RiDDNqV6twRXNxEBX4,5197
83
+ forgecli/optimizer/ponytail/decorator.py,sha256=6nAwSzWQ7-oWp0f9MIUd88bPFGB0lKhUVbDX5sj9UTM,2145
84
+ forgecli/optimizer/ponytail/factory.py,sha256=OMaiJ08fFjxv0nLC1hLFUi5rHgLzqwHzY4iOgb6T-pE,1547
85
+ forgecli/optimizer/ponytail/ruleset.py,sha256=JfkgMpa2A-A9VCBQzBz9_kQSF09crmizd85SjgqlJzs,6053
86
+ forgecli/optimizer/ponytail/state.py,sha256=mYbLExoRE2vREF2fX0KMPdZLydNpWQY36x9Xq4NJ0Wo,1744
87
+ forgecli/orchestrator/__init__.py,sha256=icLqXaW-rkZzoauSbxSADpuVvsJqJ5cmkmjiHuox_iw,25495
88
+ forgecli/planner/__init__.py,sha256=AF-l3-O_W5J-x9b8eMBP59K7LUkgYYCzULtyhBD8Nn4,1169
89
+ forgecli/planner/agent.py,sha256=AV7Qnz5Cz9WLE15sigQmsTqO-WAT1kHuobf4HIMMAy8,1954
90
+ forgecli/planner/plan.py,sha256=hyYn8wrMzCz-b1V61F3QaUitvPmeiYLcZJssn1zgyGg,1765
91
+ forgecli/planner/planner.py,sha256=reRVqA0ad-EuTbU0_n2Lcs3hOVDj4ZUyvObOkG1WQH4,439
92
+ forgecli/planner/render.py,sha256=e3jfigDkmuB0EdOXE_GUZtD6vS8bahOBrWvw5Uqa8CY,8816
93
+ forgecli/planner/serialize.py,sha256=BJUV8cpZpjntcaTV19i_gFOsjVQpGtOFbSDiC3URYb0,3836
94
+ forgecli/planner/software.py,sha256=2Nc4ZTFgqDzaf2k0L-ZJ-Kq3SYDpGC2L7xWO0FaSN7o,27218
95
+ forgecli/platform/__init__.py,sha256=GpSNQNUlSLXITnddZtWe-njoxASzNj7WxvYCvzgfz4c,2162
96
+ forgecli/platform/core.py,sha256=8knytvYR10SRu32jkjWkMAVrvg_2onq6CbdPsyWiiPk,5355
97
+ forgecli/platform/deps.py,sha256=BA6RhbVBd4t2xE9o-ahQ_lNyemHrSAKMdxNKPv_SyuQ,10872
98
+ forgecli/platform/paths.py,sha256=iSQd46vnuWWVJegouw2qHedlG01ojeVbOJIx5GvbdNY,7358
99
+ forgecli/platform/shell.py,sha256=lexXMC7klRSvl-_PZhaH6FKtAFm7naDXMrhBwaddniI,5321
100
+ forgecli/platform/update.py,sha256=YPOR4ANtG41J6gd4UptIaVO0ayR_C8ImpL9EabSlEb0,7596
101
+ forgecli/plugins/__init__.py,sha256=GuvLPFEGoIjUnjTiQAYrwoUH7Zil9mE9YZU6-jx16fo,8619
102
+ forgecli/prompts/__init__.py,sha256=Ayh_h3WSwXSyvTnB12cSNYY2Q-JAZnB13etO4Dl5zV8,273
103
+ forgecli/prompts/loader.py,sha256=RV5mh1OKnhJosFhOvoed23FeT7wjOnXru5lQB3O3Vkc,758
104
+ forgecli/prompts/registry.py,sha256=vnVrXAPg_crkF1hWT3CfLtl3Fz4dQVzh8XvbpgTtzjI,845
105
+ forgecli/prompts/renderer.py,sha256=wwo7tiUQvomZ710t-0epG32tu6ZoGyqgrwBbfYhx6JY,728
106
+ forgecli/providers/__init__.py,sha256=3aqVaNw50pgwqvULaSYpWCS88VxJhpcKrfSLTGaJ-7Q,731
107
+ forgecli/providers/anthropic.py,sha256=TDtHTWeOWZf6X8La6D-fC25gsgjSScs2FHIFq-_hLGU,7175
108
+ forgecli/providers/base.py,sha256=s5-HCfywbFIO1H5Tt0FOnYdriga4bxUKCeAZNvr3vp0,5928
109
+ forgecli/providers/builtin.py,sha256=yGCClRQYS7ZJtudYtqeKG0xzKDaL-_NMa7DtAlGfwfg,858
110
+ forgecli/providers/conversation.py,sha256=RhyCsbIXnp--qDRSGKE3XTWOXiqpcYAmYqy__2e6-NE,1913
111
+ forgecli/providers/google.py,sha256=KRyBkjmpqIP2Fafi8KDxpXvwyXM919D4cdLJh1mNOw0,10954
112
+ forgecli/providers/http_base.py,sha256=Kp73SFqLHDq_4uJ2lnpsEP9dOzCj5zms8QKSC_RCYUk,7210
113
+ forgecli/providers/mock.py,sha256=hu7i97qZcmA43fiz1vRmO4Qt2qAgFF8gtLEbFTt5LWY,3745
114
+ forgecli/providers/openai.py,sha256=fvsqY394aGrKykoHZw9GNs_A68OvdZ1xG0a1fElghkw,7045
115
+ forgecli/providers/openai_compatible.py,sha256=DcNivfEAr1Gqu8pzmGdtgQZptyNjIXJt8P4YNhDhjD0,23838
116
+ forgecli/providers/router.py,sha256=iwGwT2IitTNAi5lS1NhgQO3J780gzMPZOCNR4WjUJHI,11641
117
+ forgecli/providers/router_state.py,sha256=oQS3l5BSYNFAmDOGVUreJT7ffdM_LLMvAV76mbxtd6M,2582
118
+ forgecli/review/__init__.py,sha256=fwYv6aHoRcMOtvYjvr0VTZ-f6wpGSvq491YrQoklfKk,1342
119
+ forgecli/review/analyzer.py,sha256=aFsxbznX7j6lhWaqZ2gDLmqLnRdu8iSccVKxwP0gHp8,3134
120
+ forgecli/review/finding.py,sha256=mKF8Gcvm4WuYHK9AgaWhGP4d8PEFt1j45tDf77zmezg,1763
121
+ forgecli/review/report.py,sha256=19BkIEMCSD9jszIIb_-YR_dng6NeXBr3z414ICqhVMQ,10652
122
+ forgecli/review/repository.py,sha256=-2lfrXBIXcunr7sXEeZlxdEdIahgOXdnMqTxr9OiGUI,4310
123
+ forgecli/review/suggestions.py,sha256=_G8tM3MCq9GsfV9vxLXRrHCfAq0Vzm8VlriXQVKtumY,3260
124
+ forgecli/review/analyzers/__init__.py,sha256=9AR42PWue7RTq7TjPPqjkcA06Bei3eJXoQ_VWyCibbs,48
125
+ forgecli/review/analyzers/architecture.py,sha256=zPywknsEHfhxtqMeRinm_PeXHViYrLhchIS50hfhFOo,9151
126
+ forgecli/review/analyzers/complexity.py,sha256=0CUiCQbjhR_asA8cwoWRGqNTRF5PhL8Op5C48kZs3QM,5724
127
+ forgecli/review/analyzers/dead_code.py,sha256=YIVYfB_95QejvNODsPdhzbSQEQjvA1WG0YpiXmS7KAY,7874
128
+ forgecli/review/analyzers/duplicates.py,sha256=lxaNTxRSYoFSzslTrOcUJs_L9MfrVF17fMSmxtnkvOc,6563
129
+ forgecli/review/analyzers/performance.py,sha256=tZ6lIkRyyQoZ-54gUcUf_xEi7tc0nXD0r3sdXQPt534,5942
130
+ forgecli/review/analyzers/security.py,sha256=T-NFtThPz7LQUu32-N3i4ofNun6oDAHKM5OXLECIfFI,9024
131
+ forgecli/runtime/__init__.py,sha256=8jJwXHIXI9qcsk0Ai_somXBouwc_KTVbFVmJ5hkzT7w,275
132
+ forgecli/runtime/cache_store.py,sha256=zWGLStscLzuziom6D7yxpxlzzyQnTQ4sl1PtpSSZsn8,2321
133
+ forgecli/runtime/prepare.py,sha256=lQWz7lqJDFYAZnYj5DXmcVL4vM72xFphq0Cj0Cz7r4Y,5911
134
+ forgecli/runtime/wrappers.py,sha256=cGvZmGb6RaTAJYnfGDDR1yMB2wlh6xyPAX4EQO4BXnc,4989
135
+ forgecli/sdk/__init__.py,sha256=gE_dnjWPj1cNL-30N3VBabi3qTmSrnO8dlpChcVct4U,3372
136
+ forgecli/sdk/events.py,sha256=_i3PrtXUNTiviaJBymLCQa1Jok2HfWi6jCUvXMD7Q6k,6562
137
+ forgecli/sdk/interfaces.py,sha256=nAg7_ehGMPdrfG0eJChOid3p2BquAuIb3S2lSwg30ww,8244
138
+ forgecli/sdk/loader.py,sha256=Rn_LujH0x5hxo49K1L9H4VMWYaYEOLxdBcSf4LtXFxs,7862
139
+ forgecli/sdk/manager.py,sha256=stJt_eqilg26aTtubapl3s9jDMXgel9suvS-m2XyUKo,24720
140
+ forgecli/sdk/manifest.py,sha256=9y3EH5Z-PnJ8i2oiebFJVWI5SbV6vnc-d7AjPxusLw8,14319
141
+ forgecli/sdk/sandbox.py,sha256=JGUNuHL2D0zeSnWDdUKH_aJZMwFwxJ6CmaBnm7-4q2w,6668
142
+ forgecli/sdk/version.py,sha256=pxG7hFeFjhJyNaZVw0yradx_k69c0KgXqcnAY0MKdxs,10404
143
+ forgecli/templates/__init__.py,sha256=MRbet1ADd0nDKvlRjTOJd4g7uYbW_lVLxYhyMrAA19w,219
144
+ forgecli/templates/engine.py,sha256=9HyFtjz6ewWE7C2PLFFsc8uFzXlQtiqzEc-l0IY8zNY,1192
145
+ forgecli/templates/registry.py,sha256=6zQS54gadPXcU3cPIco-6CFk1a2pYR1DZXpAg4LUrYo,878
146
+ forgecli/utils/__init__.py,sha256=WIh_PkzipvqFuzVa0Fdxuk3xgPbxpyrPspktjjdBNXg,471
147
+ forgecli/utils/fs.py,sha256=cF2hCkNWHhOmNHFGH9whfiuMtAm69RgqEBGUpdgC0EM,2796
148
+ forgecli/utils/ids.py,sha256=j98tVfdwa-N0JezpBa0t4xKexdDkdjc3xo3q7PQcuqQ,312
149
+ forgecli/utils/io.py,sha256=CWqAwK6xY0Pg2reSbjmFBxhkGJ12zoeZGuzbrPKDrG0,745
150
+ forgecli/utils/paths.py,sha256=0rcSz12tJOio92qJvSq_VLilCG2IcarQslwih6JAhGw,2360
151
+ forgecli/utils/timing.py,sha256=niO6z25sCsq81nkCPNrMRaLKFRhgTHaTKwWWajDOf8w,605
152
+ forgeoptimizer-1.0.0.dist-info/METADATA,sha256=PDJk9Mlw44pHEbapke3fB98s7TiGVw6bdg29EKA2A30,6141
153
+ forgeoptimizer-1.0.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
154
+ forgeoptimizer-1.0.0.dist-info/entry_points.txt,sha256=jc5LXqA-RLHWqsRA6PjBUEoQHJXQZir1H0_kxIPs4oQ,48
155
+ forgeoptimizer-1.0.0.dist-info/licenses/LICENSE,sha256=wZ2_rDzYfTv5PGhPKffBvgjxIDs-5pCBTwt3osC_9Bk,1070
156
+ forgeoptimizer-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.30.1
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ forge = forgecli.cli.main:app
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Forge Authors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.