@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.
- package/LICENSE +0 -0
- package/README.md +7 -0
- package/apps/cli/bin/codeforge.cmd +2 -0
- package/apps/cli/src/bootstrap.js +115 -0
- package/apps/cli/src/cli.js +189 -0
- package/apps/cli/src/dev/git.js +17 -0
- package/apps/cli/src/dev/index.js +68 -0
- package/apps/cli/src/dev/provider.js +48 -0
- package/apps/cli/src/dev/scanner.js +14 -0
- package/apps/cli/src/index.js +31 -0
- package/bin/codeforge.js +2 -0
- package/package.json +63 -0
- package/packages/agent/contextBuilder.js +234 -0
- package/packages/agent/executor.js +1729 -0
- package/packages/agent/fallback.js +129 -0
- package/packages/agent/index.js +26 -0
- package/packages/agent/intent.js +73 -0
- package/packages/agent/modelSelector.js +469 -0
- package/packages/agent/planner.js +379 -0
- package/packages/agent/rag.js +412 -0
- package/packages/agent/ragSelector.js +570 -0
- package/packages/agent/router.js +121 -0
- package/packages/agent/thinking.js +54 -0
- package/packages/agent/toolCalls.js +258 -0
- package/packages/config/config.js +391 -0
- package/packages/config/defaults.js +72 -0
- package/packages/config/index.js +2 -0
- package/packages/core/approvalPolicy.js +140 -0
- package/packages/core/context.js +0 -0
- package/packages/core/message.js +0 -0
- package/packages/core/plan.js +0 -0
- package/packages/core/reasoning.js +0 -0
- package/packages/core/result.js +0 -0
- package/packages/core/retrieval.js +0 -0
- package/packages/core/tool.js +536 -0
- package/packages/git/branch.js +7 -0
- package/packages/git/commit.js +16 -0
- package/packages/git/diff.js +15 -0
- package/packages/git/git.js +35 -0
- package/packages/git/index.js +6 -0
- package/packages/git/remote.js +9 -0
- package/packages/git/status.js +11 -0
- package/packages/memory/index.js +0 -0
- package/packages/memory/project.js +0 -0
- package/packages/memory/session.js +0 -0
- package/packages/prompts/builder.js +43 -0
- package/packages/prompts/coder.js +38 -0
- package/packages/prompts/index.js +5 -0
- package/packages/prompts/planner.js +49 -0
- package/packages/prompts/reviewer.js +38 -0
- package/packages/prompts/system.js +94 -0
- package/packages/providers/index.js +31 -0
- package/packages/providers/openrouter.js +380 -0
- package/packages/reasoning/budget.js +0 -0
- package/packages/reasoning/chain.js +0 -0
- package/packages/reasoning/coder.js +0 -0
- package/packages/reasoning/evaluator.js +0 -0
- package/packages/reasoning/index.js +8 -0
- package/packages/reasoning/planner.js +0 -0
- package/packages/reasoning/reflector.js +0 -0
- package/packages/reasoning/reviewer.js +0 -0
- package/packages/reasoning/router.js +0 -0
- package/packages/retrieval/budget.js +92 -0
- package/packages/retrieval/cache.js +84 -0
- package/packages/retrieval/embeddings.js +147 -0
- package/packages/retrieval/graph.js +151 -0
- package/packages/retrieval/imports.js +74 -0
- package/packages/retrieval/index.js +9 -0
- package/packages/retrieval/parser/extractors/calls.js +43 -0
- package/packages/retrieval/parser/extractors/comments.js +49 -0
- package/packages/retrieval/parser/extractors/diagnostics.js +21 -0
- package/packages/retrieval/parser/extractors/exports.js +71 -0
- package/packages/retrieval/parser/extractors/imports.js +40 -0
- package/packages/retrieval/parser/extractors/index.js +12 -0
- package/packages/retrieval/parser/extractors/metrics.js +78 -0
- package/packages/retrieval/parser/extractors/symbols.js +51 -0
- package/packages/retrieval/parser/extractors/todos.js +53 -0
- package/packages/retrieval/parser/helpers.js +138 -0
- package/packages/retrieval/parser/index.js +10 -0
- package/packages/retrieval/parser/languages/c.js +14 -0
- package/packages/retrieval/parser/languages/cpp.js +21 -0
- package/packages/retrieval/parser/languages/csharp.js +14 -0
- package/packages/retrieval/parser/languages/go.js +14 -0
- package/packages/retrieval/parser/languages/index.js +12 -0
- package/packages/retrieval/parser/languages/java.js +14 -0
- package/packages/retrieval/parser/languages/javascript.js +14 -0
- package/packages/retrieval/parser/languages/php.js +14 -0
- package/packages/retrieval/parser/languages/python.js +14 -0
- package/packages/retrieval/parser/languages/ruby.js +14 -0
- package/packages/retrieval/parser/languages/rust.js +14 -0
- package/packages/retrieval/parser/languages/swift.js +14 -0
- package/packages/retrieval/parser/languages/typescript.js +14 -0
- package/packages/retrieval/parser/languages.js +218 -0
- package/packages/retrieval/parser/parseFile.js +79 -0
- package/packages/retrieval/parser/parseRepository.js +78 -0
- package/packages/retrieval/parser/queries/c.js +148 -0
- package/packages/retrieval/parser/queries/cpp.js +198 -0
- package/packages/retrieval/parser/queries/csharp.js +151 -0
- package/packages/retrieval/parser/queries/go.js +124 -0
- package/packages/retrieval/parser/queries/index.js +35 -0
- package/packages/retrieval/parser/queries/java.js +128 -0
- package/packages/retrieval/parser/queries/javascript.js +181 -0
- package/packages/retrieval/parser/queries/php.js +140 -0
- package/packages/retrieval/parser/queries/python.js +110 -0
- package/packages/retrieval/parser/queries/ruby.js +105 -0
- package/packages/retrieval/parser/queries/rust.js +175 -0
- package/packages/retrieval/parser/queries/swift.js +134 -0
- package/packages/retrieval/parser/queries/typescript.js +202 -0
- package/packages/retrieval/parser/registry.js +107 -0
- package/packages/retrieval/parser/traverse.js +82 -0
- package/packages/retrieval/parser/types.js +239 -0
- package/packages/retrieval/parser.js +78 -0
- package/packages/retrieval/ranker.js +73 -0
- package/packages/retrieval/retriever.js +910 -0
- package/packages/retrieval/symbols.js +145 -0
- package/packages/scanner/detect.js +69 -0
- package/packages/scanner/ignore.js +12 -0
- package/packages/scanner/index.js +2 -0
- package/packages/scanner/root.js +21 -0
- package/packages/scanner/scanner.js +35 -0
- package/packages/scanner/tree.js +45 -0
- package/packages/terminal/activity.js +514 -0
- package/packages/terminal/banner.js +34 -0
- package/packages/terminal/colors.js +16 -0
- package/packages/terminal/dashboard.js +94 -0
- package/packages/terminal/index.js +19 -0
- package/packages/terminal/logger.js +43 -0
- package/packages/terminal/prompt.js +11 -0
- package/packages/terminal/renderer.js +1209 -0
- package/packages/terminal/spinner.js +9 -0
- package/packages/tools/editFile.js +261 -0
- package/packages/tools/filesystem.js +82 -0
- package/packages/tools/index.js +24 -0
- package/packages/tools/readFile.js +101 -0
- package/packages/tools/registry.js +227 -0
- package/packages/tools/searchFiles.js +322 -0
- package/packages/tools/shell.js +352 -0
- package/packages/tools/writeFile.js +212 -0
- package/packages/utils/constants.js +0 -0
- package/packages/utils/helpers.js +0 -0
- 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
|
+
}
|