@oisheek_c/codeforge 1.0.1

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 (141) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +7 -0
  3. package/apps/cli/bin/codeforge.cmd +2 -0
  4. package/apps/cli/src/bootstrap.js +115 -0
  5. package/apps/cli/src/cli.js +189 -0
  6. package/apps/cli/src/dev/git.js +17 -0
  7. package/apps/cli/src/dev/index.js +68 -0
  8. package/apps/cli/src/dev/provider.js +48 -0
  9. package/apps/cli/src/dev/scanner.js +14 -0
  10. package/apps/cli/src/index.js +31 -0
  11. package/bin/codeforge.js +2 -0
  12. package/package.json +63 -0
  13. package/packages/agent/contextBuilder.js +234 -0
  14. package/packages/agent/executor.js +1729 -0
  15. package/packages/agent/fallback.js +129 -0
  16. package/packages/agent/index.js +26 -0
  17. package/packages/agent/intent.js +73 -0
  18. package/packages/agent/modelSelector.js +469 -0
  19. package/packages/agent/planner.js +379 -0
  20. package/packages/agent/rag.js +412 -0
  21. package/packages/agent/ragSelector.js +570 -0
  22. package/packages/agent/router.js +121 -0
  23. package/packages/agent/thinking.js +54 -0
  24. package/packages/agent/toolCalls.js +258 -0
  25. package/packages/config/config.js +391 -0
  26. package/packages/config/defaults.js +72 -0
  27. package/packages/config/index.js +2 -0
  28. package/packages/core/approvalPolicy.js +140 -0
  29. package/packages/core/context.js +0 -0
  30. package/packages/core/message.js +0 -0
  31. package/packages/core/plan.js +0 -0
  32. package/packages/core/reasoning.js +0 -0
  33. package/packages/core/result.js +0 -0
  34. package/packages/core/retrieval.js +0 -0
  35. package/packages/core/tool.js +536 -0
  36. package/packages/git/branch.js +7 -0
  37. package/packages/git/commit.js +16 -0
  38. package/packages/git/diff.js +15 -0
  39. package/packages/git/git.js +35 -0
  40. package/packages/git/index.js +6 -0
  41. package/packages/git/remote.js +9 -0
  42. package/packages/git/status.js +11 -0
  43. package/packages/memory/index.js +0 -0
  44. package/packages/memory/project.js +0 -0
  45. package/packages/memory/session.js +0 -0
  46. package/packages/prompts/builder.js +43 -0
  47. package/packages/prompts/coder.js +38 -0
  48. package/packages/prompts/index.js +5 -0
  49. package/packages/prompts/planner.js +49 -0
  50. package/packages/prompts/reviewer.js +38 -0
  51. package/packages/prompts/system.js +94 -0
  52. package/packages/providers/index.js +31 -0
  53. package/packages/providers/openrouter.js +380 -0
  54. package/packages/reasoning/budget.js +0 -0
  55. package/packages/reasoning/chain.js +0 -0
  56. package/packages/reasoning/coder.js +0 -0
  57. package/packages/reasoning/evaluator.js +0 -0
  58. package/packages/reasoning/index.js +8 -0
  59. package/packages/reasoning/planner.js +0 -0
  60. package/packages/reasoning/reflector.js +0 -0
  61. package/packages/reasoning/reviewer.js +0 -0
  62. package/packages/reasoning/router.js +0 -0
  63. package/packages/retrieval/budget.js +92 -0
  64. package/packages/retrieval/cache.js +84 -0
  65. package/packages/retrieval/embeddings.js +147 -0
  66. package/packages/retrieval/graph.js +151 -0
  67. package/packages/retrieval/imports.js +74 -0
  68. package/packages/retrieval/index.js +9 -0
  69. package/packages/retrieval/parser/extractors/calls.js +43 -0
  70. package/packages/retrieval/parser/extractors/comments.js +49 -0
  71. package/packages/retrieval/parser/extractors/diagnostics.js +21 -0
  72. package/packages/retrieval/parser/extractors/exports.js +71 -0
  73. package/packages/retrieval/parser/extractors/imports.js +40 -0
  74. package/packages/retrieval/parser/extractors/index.js +12 -0
  75. package/packages/retrieval/parser/extractors/metrics.js +78 -0
  76. package/packages/retrieval/parser/extractors/symbols.js +51 -0
  77. package/packages/retrieval/parser/extractors/todos.js +53 -0
  78. package/packages/retrieval/parser/helpers.js +138 -0
  79. package/packages/retrieval/parser/index.js +10 -0
  80. package/packages/retrieval/parser/languages/c.js +14 -0
  81. package/packages/retrieval/parser/languages/cpp.js +21 -0
  82. package/packages/retrieval/parser/languages/csharp.js +14 -0
  83. package/packages/retrieval/parser/languages/go.js +14 -0
  84. package/packages/retrieval/parser/languages/index.js +12 -0
  85. package/packages/retrieval/parser/languages/java.js +14 -0
  86. package/packages/retrieval/parser/languages/javascript.js +14 -0
  87. package/packages/retrieval/parser/languages/php.js +14 -0
  88. package/packages/retrieval/parser/languages/python.js +14 -0
  89. package/packages/retrieval/parser/languages/ruby.js +14 -0
  90. package/packages/retrieval/parser/languages/rust.js +14 -0
  91. package/packages/retrieval/parser/languages/swift.js +14 -0
  92. package/packages/retrieval/parser/languages/typescript.js +14 -0
  93. package/packages/retrieval/parser/languages.js +218 -0
  94. package/packages/retrieval/parser/parseFile.js +79 -0
  95. package/packages/retrieval/parser/parseRepository.js +78 -0
  96. package/packages/retrieval/parser/queries/c.js +148 -0
  97. package/packages/retrieval/parser/queries/cpp.js +198 -0
  98. package/packages/retrieval/parser/queries/csharp.js +151 -0
  99. package/packages/retrieval/parser/queries/go.js +124 -0
  100. package/packages/retrieval/parser/queries/index.js +35 -0
  101. package/packages/retrieval/parser/queries/java.js +128 -0
  102. package/packages/retrieval/parser/queries/javascript.js +181 -0
  103. package/packages/retrieval/parser/queries/php.js +140 -0
  104. package/packages/retrieval/parser/queries/python.js +110 -0
  105. package/packages/retrieval/parser/queries/ruby.js +105 -0
  106. package/packages/retrieval/parser/queries/rust.js +175 -0
  107. package/packages/retrieval/parser/queries/swift.js +134 -0
  108. package/packages/retrieval/parser/queries/typescript.js +202 -0
  109. package/packages/retrieval/parser/registry.js +107 -0
  110. package/packages/retrieval/parser/traverse.js +82 -0
  111. package/packages/retrieval/parser/types.js +239 -0
  112. package/packages/retrieval/parser.js +78 -0
  113. package/packages/retrieval/ranker.js +73 -0
  114. package/packages/retrieval/retriever.js +910 -0
  115. package/packages/retrieval/symbols.js +145 -0
  116. package/packages/scanner/detect.js +69 -0
  117. package/packages/scanner/ignore.js +12 -0
  118. package/packages/scanner/index.js +2 -0
  119. package/packages/scanner/root.js +21 -0
  120. package/packages/scanner/scanner.js +35 -0
  121. package/packages/scanner/tree.js +45 -0
  122. package/packages/terminal/activity.js +514 -0
  123. package/packages/terminal/banner.js +34 -0
  124. package/packages/terminal/colors.js +16 -0
  125. package/packages/terminal/dashboard.js +94 -0
  126. package/packages/terminal/index.js +19 -0
  127. package/packages/terminal/logger.js +43 -0
  128. package/packages/terminal/prompt.js +11 -0
  129. package/packages/terminal/renderer.js +1209 -0
  130. package/packages/terminal/spinner.js +9 -0
  131. package/packages/tools/editFile.js +261 -0
  132. package/packages/tools/filesystem.js +82 -0
  133. package/packages/tools/index.js +24 -0
  134. package/packages/tools/readFile.js +101 -0
  135. package/packages/tools/registry.js +227 -0
  136. package/packages/tools/searchFiles.js +322 -0
  137. package/packages/tools/shell.js +352 -0
  138. package/packages/tools/writeFile.js +212 -0
  139. package/packages/utils/constants.js +0 -0
  140. package/packages/utils/helpers.js +0 -0
  141. package/packages/utils/logger.js +0 -0
@@ -0,0 +1,234 @@
1
+ export function formatRetrievalResults(results = []) {
2
+ if (!Array.isArray(results) || results.length === 0) {
3
+ return "";
4
+ }
5
+
6
+ return results
7
+ .map((result, index) => {
8
+ const header = [
9
+ `Result ${index + 1}`,
10
+ result.path ? `File: ${result.path}` : null,
11
+ result.language ? `Language: ${result.language}` : null,
12
+ Number.isFinite(result.score)
13
+ ? `Relevance score: ${result.score}`
14
+ : null,
15
+ result.reason
16
+ ? `Match reason: ${result.reason}`
17
+ : null,
18
+ ]
19
+ .filter(Boolean)
20
+ .join("\n");
21
+
22
+ const symbols =
23
+ Array.isArray(result.symbols) &&
24
+ result.symbols.length > 0
25
+ ? result.symbols
26
+ .slice(0, 20)
27
+ .map((symbol) => {
28
+ const kind = symbol.kind
29
+ ? `${symbol.kind} `
30
+ : "";
31
+
32
+ return `- ${kind}${symbol.name}`;
33
+ })
34
+ .join("\n")
35
+ : "";
36
+
37
+ const imports =
38
+ Array.isArray(result.imports) &&
39
+ result.imports.length > 0
40
+ ? result.imports
41
+ .slice(0, 20)
42
+ .map((item) => `- ${item.source}`)
43
+ .join("\n")
44
+ : "";
45
+
46
+ const exports =
47
+ Array.isArray(result.exports) &&
48
+ result.exports.length > 0
49
+ ? result.exports
50
+ .slice(0, 20)
51
+ .map((item) => `- ${item.name}`)
52
+ .join("\n")
53
+ : "";
54
+
55
+ const sections = [header];
56
+
57
+ if (symbols) {
58
+ sections.push(`Symbols:\n${symbols}`);
59
+ }
60
+
61
+ if (imports) {
62
+ sections.push(`Imports:\n${imports}`);
63
+ }
64
+
65
+ if (exports) {
66
+ sections.push(`Exports:\n${exports}`);
67
+ }
68
+
69
+ if (result.content) {
70
+ sections.push(
71
+ `Source excerpt:\n${result.content}`
72
+ );
73
+ }
74
+
75
+ return sections.join("\n\n");
76
+ })
77
+ .join("\n\n---\n\n");
78
+ }
79
+
80
+ function buildModelUserMessage({
81
+ prompt,
82
+ plan,
83
+ project,
84
+ git,
85
+ rag,
86
+ }) {
87
+ const sections = [];
88
+
89
+ sections.push(
90
+ [
91
+ "User request:",
92
+ prompt,
93
+ ].join("\n")
94
+ );
95
+
96
+ const projectDetails = [
97
+ project?.name
98
+ ? `Project: ${project.name}`
99
+ : null,
100
+
101
+ project?.root
102
+ ? `Project root: ${project.root}`
103
+ : null,
104
+
105
+ project?.language
106
+ ? `Primary language: ${project.language}`
107
+ : null,
108
+
109
+ git?.branch?.current
110
+ ? `Git branch: ${git.branch.current}`
111
+ : null,
112
+
113
+ typeof git?.status?.clean === "boolean"
114
+ ? `Working tree: ${
115
+ git.status.clean
116
+ ? "clean"
117
+ : "has uncommitted changes"
118
+ }`
119
+ : null,
120
+ ].filter(Boolean);
121
+
122
+ if (projectDetails.length > 0) {
123
+ sections.push(
124
+ [
125
+ "Project context:",
126
+ ...projectDetails,
127
+ ].join("\n")
128
+ );
129
+ }
130
+
131
+ if (rag?.enabled) {
132
+ const retrievalText =
133
+ formatRetrievalResults(rag.results);
134
+
135
+ if (retrievalText) {
136
+ sections.push(
137
+ [
138
+ "Retrieved repository context:",
139
+ "",
140
+ retrievalText,
141
+ ].join("\n")
142
+ );
143
+ } else {
144
+ sections.push(
145
+ [
146
+ "Retrieved repository context:",
147
+ "No relevant repository results were found.",
148
+ ].join("\n")
149
+ );
150
+ }
151
+ }
152
+
153
+ sections.push(
154
+ [
155
+ "Instructions:",
156
+ "Use the repository context above when it is relevant to the request.",
157
+ "Base claims about the codebase on the provided repository evidence.",
158
+ "Do not invent files, symbols, dependencies, or behavior that are not supported by the available context.",
159
+ "If the available repository context is insufficient, say what information is missing rather than pretending you inspected code that was not provided.",
160
+ plan?.requiresTools ||
161
+ plan?.requiresWrite
162
+ ? [
163
+ "Engineering workflow:",
164
+ "Inspect relevant project files before making changes.",
165
+ "Use the available file tools to make the requested implementation changes.",
166
+ "After making changes, use execute_command to run an appropriate verification command when one is available.",
167
+ "If verification fails, use the failure output to diagnose the problem, modify the implementation, and verify again.",
168
+ "Do not claim the implementation is complete until it has been verified, unless verification cannot reasonably be performed.",
169
+ "Keep changes focused on the user's request.",
170
+ ].join("\n")
171
+ : null,
172
+ "Return a direct final answer to the user.",
173
+ ].join("\n")
174
+ );
175
+
176
+ return sections.join("\n\n");
177
+ }
178
+
179
+ export function buildContext({
180
+ prompt,
181
+ plan,
182
+ project = {},
183
+ git = {},
184
+ memory = {},
185
+ rag = {},
186
+ systemPrompt = "",
187
+ }) {
188
+ const context = {
189
+ system: systemPrompt,
190
+
191
+ user: prompt,
192
+
193
+ modelUser: buildModelUserMessage({
194
+ prompt,
195
+ plan,
196
+ project,
197
+ git,
198
+ rag,
199
+ }),
200
+
201
+ project: {
202
+ name: project.name ?? null,
203
+ root: project.root ?? null,
204
+ language: project.language ?? null,
205
+ },
206
+
207
+ git: {
208
+ branch: git.branch?.current ?? null,
209
+ clean: git.status?.clean ?? true,
210
+ },
211
+
212
+ memory,
213
+
214
+ retrieval: rag.enabled
215
+ ? {
216
+ query: rag.query,
217
+ results: rag.results,
218
+ stats: rag.stats,
219
+ }
220
+ : null,
221
+
222
+ execution: {
223
+ intent: plan.intent,
224
+ steps: plan.steps,
225
+ requiresRAG: plan.requiresRAG,
226
+ requiresThinking: plan.requiresThinking,
227
+ requiresTools: plan.requiresTools,
228
+ requiresWrite: plan.requiresWrite,
229
+ requiresGit: plan.requiresGit,
230
+ },
231
+ };
232
+
233
+ return context;
234
+ }