@omaikit/agents 0.1.1 → 0.1.3
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/dist/ai-provider/openai.d.ts +1 -1
- package/dist/ai-provider/openai.d.ts.map +1 -1
- package/dist/ai-provider/openai.js +53 -41
- package/dist/ai-provider/openai.js.map +1 -1
- package/dist/ai-provider/provider.d.ts +7 -1
- package/dist/ai-provider/provider.d.ts.map +1 -1
- package/dist/coder/coder.d.ts +0 -16
- package/dist/coder/coder.d.ts.map +1 -1
- package/dist/coder/coder.js +36 -235
- package/dist/coder/coder.js.map +1 -1
- package/dist/coder/prompt-templates.d.ts.map +1 -1
- package/dist/coder/prompt-templates.js +15 -1
- package/dist/coder/prompt-templates.js.map +1 -1
- package/dist/manager/manager.js +1 -1
- package/dist/manager/manager.js.map +1 -1
- package/dist/memory/memory-store.d.ts +2 -0
- package/dist/memory/memory-store.d.ts.map +1 -1
- package/dist/memory/memory-store.js +27 -0
- package/dist/memory/memory-store.js.map +1 -1
- package/dist/tools/apply-patch.d.ts.map +1 -1
- package/dist/tools/apply-patch.js +76 -86
- package/dist/tools/apply-patch.js.map +1 -1
- package/dist/tools/default-registry.d.ts.map +1 -1
- package/dist/tools/default-registry.js +6 -2
- package/dist/tools/default-registry.js.map +1 -1
- package/dist/tools/edit-file.d.ts +4 -0
- package/dist/tools/edit-file.d.ts.map +1 -0
- package/dist/tools/edit-file.js +95 -0
- package/dist/tools/edit-file.js.map +1 -0
- package/dist/tools/index.d.ts +3 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list-files.d.ts +4 -0
- package/dist/tools/list-files.d.ts.map +1 -0
- package/dist/tools/list-files.js +38 -0
- package/dist/tools/list-files.js.map +1 -0
- package/dist/tools/read-file.d.ts +4 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +39 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +1 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/search.js +1 -1
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/types.d.ts +1 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -5,7 +5,7 @@ export declare class OpenAIProvider implements AIProvider {
|
|
|
5
5
|
constructor(apiKey?: string);
|
|
6
6
|
init(config?: Record<string, unknown>): Promise<void>;
|
|
7
7
|
generate(prompt: string, options?: AIProviderOptions): Promise<string>;
|
|
8
|
-
|
|
8
|
+
generateCode(prompt: string, options?: AIProviderOptions): Promise<any>;
|
|
9
9
|
private formatToolsForResponses;
|
|
10
10
|
complete(prompt: string): Promise<string>;
|
|
11
11
|
onProgress(_callback: (chunk: string) => void): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/ai-provider/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/ai-provider/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAO3D,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,CAAC,EAAE,MAAM;IAIrB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYrD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmGtE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC;IAqG7E,OAAO,CAAC,uBAAuB;IAiBzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,gBAAgB;CAkCzB"}
|
|
@@ -75,6 +75,9 @@ export class OpenAIProvider {
|
|
|
75
75
|
}
|
|
76
76
|
const args = parseToolArgs(rawArgs);
|
|
77
77
|
const result = await options.toolRegistry.call(toolName, args, options.toolContext ?? {});
|
|
78
|
+
if (options?.onToolCall) {
|
|
79
|
+
options.onToolCall({ name: toolName, arguments: args, result });
|
|
80
|
+
}
|
|
78
81
|
messages.push({
|
|
79
82
|
role: 'tool',
|
|
80
83
|
tool_call_id: toolCall.id,
|
|
@@ -101,7 +104,7 @@ export class OpenAIProvider {
|
|
|
101
104
|
throw new Error(`OpenAI API error: ${message}`);
|
|
102
105
|
}
|
|
103
106
|
}
|
|
104
|
-
async
|
|
107
|
+
async generateCode(prompt, options) {
|
|
105
108
|
if (!this.client) {
|
|
106
109
|
if (!this.apiKey)
|
|
107
110
|
return `OPENAI_ECHO:\n${prompt}`;
|
|
@@ -115,7 +118,7 @@ export class OpenAIProvider {
|
|
|
115
118
|
const tools = this.resolveTools(options);
|
|
116
119
|
const maxToolCalls = options?.maxToolCalls ?? 3;
|
|
117
120
|
let previousResponseId = null;
|
|
118
|
-
let input = prompt;
|
|
121
|
+
let input = [{ role: 'user', content: prompt }];
|
|
119
122
|
let lastContent = '';
|
|
120
123
|
for (let i = 0; i <= maxToolCalls; i += 1) {
|
|
121
124
|
const response = await this.client.responses.create({
|
|
@@ -143,9 +146,13 @@ export class OpenAIProvider {
|
|
|
143
146
|
lastContent = collected;
|
|
144
147
|
}
|
|
145
148
|
}
|
|
149
|
+
if (lastContent && options?.onTextResponse) {
|
|
150
|
+
options.onTextResponse(lastContent);
|
|
151
|
+
}
|
|
152
|
+
// console.log('Extracted tool calls:', toolCalls);
|
|
146
153
|
const toolCalls = this.extractToolCalls(response);
|
|
147
154
|
if (toolCalls.length === 0) {
|
|
148
|
-
|
|
155
|
+
continue;
|
|
149
156
|
}
|
|
150
157
|
if (!options?.toolRegistry) {
|
|
151
158
|
throw new Error('Tool calls requested but no tool registry provided');
|
|
@@ -153,28 +160,41 @@ export class OpenAIProvider {
|
|
|
153
160
|
const toolOutputs = [];
|
|
154
161
|
for (const toolCall of toolCalls) {
|
|
155
162
|
let type = 'function_call_output';
|
|
156
|
-
|
|
157
|
-
|
|
163
|
+
let args = parseToolArgs(toolCall.arguments);
|
|
164
|
+
if (toolCall.name === 'apply_patch_call') {
|
|
165
|
+
type = 'apply_patch_call_output';
|
|
166
|
+
args = toolCall.arguments;
|
|
167
|
+
}
|
|
168
|
+
const result = await options.toolRegistry.call(toolCall.name, args, options.toolContext ?? {});
|
|
169
|
+
if (options?.onToolCall) {
|
|
170
|
+
options.onToolCall({ name: toolCall.name, arguments: args, result });
|
|
158
171
|
}
|
|
159
|
-
const result = await options.toolRegistry.call(toolCall.name, parseToolArgs(toolCall.arguments), options.toolContext ?? {});
|
|
160
172
|
toolOutputs.push({
|
|
161
173
|
type,
|
|
162
174
|
call_id: toolCall.call_id,
|
|
163
175
|
output: JSON.stringify(result),
|
|
176
|
+
status: result.ok ? 'completed' : 'incomplete',
|
|
164
177
|
});
|
|
178
|
+
// console.log('Tool called:', toolCall.name, args, result);
|
|
165
179
|
}
|
|
166
180
|
input = [{ role: 'user', content: prompt }, ...toolOutputs];
|
|
167
181
|
}
|
|
168
182
|
return lastContent;
|
|
169
183
|
}
|
|
170
184
|
formatToolsForResponses(tools) {
|
|
171
|
-
return tools.map((tool) =>
|
|
172
|
-
type
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
185
|
+
return tools.map((tool) => {
|
|
186
|
+
if (tool.type && ['web_search', 'apply_patch'].includes(tool.type)) {
|
|
187
|
+
const type = tool.type;
|
|
188
|
+
return { type };
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
type: 'function',
|
|
192
|
+
name: tool.name,
|
|
193
|
+
description: tool.description,
|
|
194
|
+
parameters: tool.parameters,
|
|
195
|
+
strict: false,
|
|
196
|
+
};
|
|
197
|
+
});
|
|
178
198
|
}
|
|
179
199
|
async complete(prompt) {
|
|
180
200
|
return this.generate(prompt);
|
|
@@ -201,33 +221,25 @@ export class OpenAIProvider {
|
|
|
201
221
|
return toolCalls;
|
|
202
222
|
}
|
|
203
223
|
for (const item of output) {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
toolCalls.
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
if (item?.type === 'function_call' && item?.name) {
|
|
225
|
-
toolCalls.push({
|
|
226
|
-
id: item.id || `tool_${toolCalls.length + 1}`,
|
|
227
|
-
name: item.name,
|
|
228
|
-
arguments: item.arguments || '{}',
|
|
229
|
-
call_id: item.call_id || `call_${toolCalls.length + 1}`,
|
|
230
|
-
});
|
|
224
|
+
switch (item?.type) {
|
|
225
|
+
case 'function_call':
|
|
226
|
+
toolCalls.push({
|
|
227
|
+
id: item.id || `tool_${toolCalls.length + 1}`,
|
|
228
|
+
name: item.name,
|
|
229
|
+
arguments: item.arguments || '{}',
|
|
230
|
+
call_id: item.call_id || `call_${toolCalls.length + 1}`,
|
|
231
|
+
});
|
|
232
|
+
break;
|
|
233
|
+
case 'apply_patch_call':
|
|
234
|
+
toolCalls.push({
|
|
235
|
+
id: item.id || `tool_${toolCalls.length + 1}`,
|
|
236
|
+
name: 'apply_patch_call',
|
|
237
|
+
arguments: item.operation || {},
|
|
238
|
+
call_id: item.call_id || `call_${toolCalls.length + 1}`,
|
|
239
|
+
});
|
|
240
|
+
break;
|
|
241
|
+
default:
|
|
242
|
+
break;
|
|
231
243
|
}
|
|
232
244
|
}
|
|
233
245
|
return toolCalls;
|
|
@@ -235,7 +247,7 @@ export class OpenAIProvider {
|
|
|
235
247
|
}
|
|
236
248
|
function parseToolArgs(rawArgs) {
|
|
237
249
|
try {
|
|
238
|
-
const parsed = JSON.parse(rawArgs);
|
|
250
|
+
const parsed = typeof rawArgs === 'string' ? JSON.parse(rawArgs) : rawArgs;
|
|
239
251
|
if (parsed && typeof parsed === 'object') {
|
|
240
252
|
return parsed;
|
|
241
253
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/ai-provider/openai.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/ai-provider/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,12 @@ export interface AIProviderOptions {
|
|
|
6
6
|
maxTokens?: number;
|
|
7
7
|
temperature?: number;
|
|
8
8
|
onProgress?: (chunk: string) => void;
|
|
9
|
+
onToolCall?: (event: {
|
|
10
|
+
name: string;
|
|
11
|
+
arguments: Record<string, unknown>;
|
|
12
|
+
result: unknown;
|
|
13
|
+
}) => void;
|
|
14
|
+
onTextResponse?: (text: string) => void;
|
|
9
15
|
tools?: ToolDefinition[];
|
|
10
16
|
toolRegistry?: ToolRegistry;
|
|
11
17
|
toolContext?: ToolContext;
|
|
@@ -17,7 +23,7 @@ export interface AIProviderOptions {
|
|
|
17
23
|
export interface AIProvider {
|
|
18
24
|
init?(config?: Record<string, unknown>): Promise<void> | void;
|
|
19
25
|
generate(prompt: string, options?: AIProviderOptions): Promise<string>;
|
|
20
|
-
generateCode?(prompt: string, options?: AIProviderOptions): Promise<
|
|
26
|
+
generateCode?(prompt: string, options?: AIProviderOptions): Promise<any>;
|
|
21
27
|
close?(): Promise<void> | void;
|
|
22
28
|
complete?(prompt: string): Promise<string>;
|
|
23
29
|
onProgress?(callback: (chunk: string) => void): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ai-provider/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,YAAY,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ai-provider/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,MAAM,EAAE,OAAO,CAAC;KACjB,KAAK,IAAI,CAAC;IACX,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,YAAY,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzE,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;CACtD"}
|
package/dist/coder/coder.d.ts
CHANGED
|
@@ -31,8 +31,6 @@ export interface CoderAgentOutput extends AgentOutput {
|
|
|
31
31
|
export declare class CoderAgent extends Agent {
|
|
32
32
|
name: string;
|
|
33
33
|
private promptTemplates;
|
|
34
|
-
private codeParser;
|
|
35
|
-
private codeWriter;
|
|
36
34
|
private provider?;
|
|
37
35
|
private memoryStore;
|
|
38
36
|
private cfg;
|
|
@@ -54,25 +52,11 @@ export declare class CoderAgent extends Agent {
|
|
|
54
52
|
* Validate input structure
|
|
55
53
|
*/
|
|
56
54
|
private validateInput;
|
|
57
|
-
/**
|
|
58
|
-
* Determine target programming language
|
|
59
|
-
*/
|
|
60
|
-
private determineLanguage;
|
|
61
|
-
private normalizeLanguage;
|
|
62
55
|
/**
|
|
63
56
|
* Call LLM to generate code
|
|
64
57
|
*/
|
|
65
58
|
private callLLM;
|
|
66
|
-
/**
|
|
67
|
-
* Generate mock code for demonstration
|
|
68
|
-
*/
|
|
69
|
-
private getMockGeneratedCode;
|
|
70
|
-
/**
|
|
71
|
-
* Convert string to PascalCase
|
|
72
|
-
*/
|
|
73
|
-
private toPascalCase;
|
|
74
59
|
private buildReuseSection;
|
|
75
|
-
private withTimeout;
|
|
76
60
|
private buildToolContext;
|
|
77
61
|
}
|
|
78
62
|
//# sourceMappingURL=coder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coder.d.ts","sourceRoot":"","sources":["../../src/coder/coder.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"coder.d.ts","sourceRoot":"","sources":["../../src/coder/coder.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AASnC,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,IAAI,EAAE,IAAI,CAAC;IACX,cAAc,EAAE,GAAG,CAAC;IACpB,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,UAAU,CAAC,EAAE;YACX,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;CACH;AAED,qBAAa,UAAW,SAAQ,KAAK;IAC5B,IAAI,SAAW;IAEtB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,CAAa;IAC9B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,GAAG,CAAgB;gBAEf,MAAM,CAAC,EAAE,MAAM;IAOrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwGhE;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAwEjD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAK9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;YACW,OAAO;IAqCrB,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,gBAAgB;CAazB"}
|
package/dist/coder/coder.js
CHANGED
|
@@ -5,8 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Agent } from '../agent.js';
|
|
7
7
|
import { PromptTemplates } from './prompt-templates.js';
|
|
8
|
-
import { CodeParser } from './code-parser.js';
|
|
9
|
-
import { CodeWriter } from '@omaikit/analysis';
|
|
10
8
|
import { createProvider } from '../ai-provider/factory.js';
|
|
11
9
|
import { createDefaultToolRegistry } from '../tools/default-registry.js';
|
|
12
10
|
import { MemoryStore } from '../memory/memory-store.js';
|
|
@@ -14,23 +12,18 @@ import { loadConfig } from '@omaikit/config';
|
|
|
14
12
|
export class CoderAgent extends Agent {
|
|
15
13
|
name = 'Coder';
|
|
16
14
|
promptTemplates;
|
|
17
|
-
codeParser;
|
|
18
|
-
codeWriter;
|
|
19
15
|
provider;
|
|
20
16
|
memoryStore;
|
|
21
17
|
cfg;
|
|
22
18
|
constructor(logger) {
|
|
23
19
|
super(logger);
|
|
24
20
|
this.promptTemplates = new PromptTemplates();
|
|
25
|
-
this.codeParser = new CodeParser();
|
|
26
|
-
this.codeWriter = new CodeWriter();
|
|
27
21
|
this.memoryStore = new MemoryStore();
|
|
28
22
|
this.cfg = loadConfig();
|
|
29
23
|
}
|
|
30
24
|
async init() {
|
|
31
25
|
try {
|
|
32
26
|
this.provider = createProvider();
|
|
33
|
-
this.logger.info('Coder initialized');
|
|
34
27
|
}
|
|
35
28
|
catch (error) {
|
|
36
29
|
this.logger.warn('Could not initialize Coder, using mock mode');
|
|
@@ -63,7 +56,6 @@ export class CoderAgent extends Agent {
|
|
|
63
56
|
await this.beforeExecute(input);
|
|
64
57
|
// Validate input
|
|
65
58
|
this.validateInput(input);
|
|
66
|
-
const fallbackLanguage = this.determineLanguage(input);
|
|
67
59
|
// Generate prompt
|
|
68
60
|
const prompt = await this.promptTemplates.generatePrompt(input.task, input.projectContext, input.plan);
|
|
69
61
|
const recentMemory = await this.memoryStore.readRecent(this.name, 3);
|
|
@@ -79,33 +71,33 @@ export class CoderAgent extends Agent {
|
|
|
79
71
|
output.result.prompt = finalPrompt;
|
|
80
72
|
// Call LLM via AIProvider (would be injected)
|
|
81
73
|
// For now, return mock response
|
|
82
|
-
const llmResponse = await this.callLLM(finalPrompt, input
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
74
|
+
const { response: llmResponse, toolCalls } = await this.callLLM(finalPrompt, input);
|
|
75
|
+
const timestamp = new Date().toISOString();
|
|
76
|
+
const memoryEntries = [];
|
|
77
|
+
for (const toolCall of toolCalls) {
|
|
78
|
+
memoryEntries.push({
|
|
79
|
+
timestamp,
|
|
80
|
+
prompt: finalPrompt,
|
|
81
|
+
response: JSON.stringify(toolCall),
|
|
82
|
+
taskId: input.task.id,
|
|
83
|
+
metadata: { type: 'tool_call', tool: toolCall.name },
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
if (llmResponse && llmResponse.trim().length > 0) {
|
|
87
|
+
memoryEntries.push({
|
|
88
|
+
timestamp,
|
|
89
|
+
prompt: finalPrompt,
|
|
90
|
+
response: llmResponse,
|
|
91
|
+
taskId: input.task.id,
|
|
92
|
+
metadata: { type: 'text_response' },
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
await this.memoryStore.appendManyUnique(this.name, memoryEntries);
|
|
98
96
|
// Prepare output
|
|
99
|
-
output.result.files = files;
|
|
100
97
|
output.result.metadata = {
|
|
101
98
|
generatedAt: new Date().toISOString(),
|
|
102
|
-
model:
|
|
99
|
+
model: this.cfg.coderModel,
|
|
103
100
|
};
|
|
104
|
-
output.metadata.filesGenerated = files.length;
|
|
105
|
-
output.metadata.writtenPaths = writtenPaths;
|
|
106
|
-
output.metadata.totalLOC = files.reduce((sum, f) => sum + (f.content.split('\n').length || 0), 0);
|
|
107
|
-
output.metadata.syntaxErrors = 0;
|
|
108
|
-
output.metadata.lintingIssues = 0;
|
|
109
101
|
await this.afterExecute(output);
|
|
110
102
|
}
|
|
111
103
|
catch (error) {
|
|
@@ -115,13 +107,6 @@ export class CoderAgent extends Agent {
|
|
|
115
107
|
code: 'CODER_ERROR',
|
|
116
108
|
message: error.message,
|
|
117
109
|
};
|
|
118
|
-
await this.memoryStore.append(this.name, {
|
|
119
|
-
timestamp: new Date().toISOString(),
|
|
120
|
-
prompt: output.result.prompt || '',
|
|
121
|
-
response: output.error.message,
|
|
122
|
-
taskId: input.task.id,
|
|
123
|
-
metadata: { status: 'failed' },
|
|
124
|
-
});
|
|
125
110
|
}
|
|
126
111
|
output.metadata.durationMs = Date.now() - startTime;
|
|
127
112
|
return output;
|
|
@@ -215,71 +200,17 @@ export class CoderAgent extends Agent {
|
|
|
215
200
|
throw new Error('Task must have id and title');
|
|
216
201
|
}
|
|
217
202
|
}
|
|
218
|
-
/**
|
|
219
|
-
* Determine target programming language
|
|
220
|
-
*/
|
|
221
|
-
determineLanguage(input) {
|
|
222
|
-
const candidates = [];
|
|
223
|
-
const addCandidate = (value) => {
|
|
224
|
-
if (typeof value === 'string') {
|
|
225
|
-
candidates.push(value);
|
|
226
|
-
}
|
|
227
|
-
};
|
|
228
|
-
const analysisLanguages = input.projectContext?.analysis?.languages;
|
|
229
|
-
if (Array.isArray(analysisLanguages)) {
|
|
230
|
-
analysisLanguages.forEach((lang) => addCandidate(lang));
|
|
231
|
-
}
|
|
232
|
-
const metadataLanguages = input.projectContext?.metadata?.languages;
|
|
233
|
-
if (Array.isArray(metadataLanguages)) {
|
|
234
|
-
metadataLanguages.forEach((lang) => addCandidate(lang));
|
|
235
|
-
}
|
|
236
|
-
const techStack = input.plan?.techStack;
|
|
237
|
-
if (Array.isArray(techStack)) {
|
|
238
|
-
techStack.forEach((entry) => addCandidate(entry));
|
|
239
|
-
}
|
|
240
|
-
const projectType = input.plan?.projectType;
|
|
241
|
-
addCandidate(projectType);
|
|
242
|
-
for (const candidate of candidates) {
|
|
243
|
-
const normalized = this.normalizeLanguage(candidate);
|
|
244
|
-
if (normalized) {
|
|
245
|
-
return normalized;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
return 'typescript';
|
|
249
|
-
}
|
|
250
|
-
normalizeLanguage(value) {
|
|
251
|
-
const normalized = value.toLowerCase();
|
|
252
|
-
if (normalized.includes('golang') || normalized === 'go')
|
|
253
|
-
return 'go';
|
|
254
|
-
if (normalized.includes('typescript'))
|
|
255
|
-
return 'typescript';
|
|
256
|
-
if (normalized.includes('javascript'))
|
|
257
|
-
return 'javascript';
|
|
258
|
-
if (normalized.includes('python'))
|
|
259
|
-
return 'python';
|
|
260
|
-
if (normalized.includes('rust'))
|
|
261
|
-
return 'rust';
|
|
262
|
-
if (normalized.includes('c#') || normalized.includes('csharp'))
|
|
263
|
-
return 'csharp';
|
|
264
|
-
if (normalized.includes('php'))
|
|
265
|
-
return 'php';
|
|
266
|
-
return null;
|
|
267
|
-
}
|
|
268
203
|
/**
|
|
269
204
|
* Call LLM to generate code
|
|
270
205
|
*/
|
|
271
|
-
async callLLM(prompt, input
|
|
272
|
-
|
|
273
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
274
|
-
return this.getMockGeneratedCode(fallbackLanguage, input.task);
|
|
275
|
-
}
|
|
276
|
-
if (!this.provider) {
|
|
277
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
278
|
-
return this.getMockGeneratedCode(fallbackLanguage, input.task);
|
|
279
|
-
}
|
|
206
|
+
async callLLM(prompt, input) {
|
|
207
|
+
const toolCalls = [];
|
|
280
208
|
const toolRegistry = createDefaultToolRegistry();
|
|
281
209
|
const toolContext = this.buildToolContext(input);
|
|
282
|
-
if (!this.provider
|
|
210
|
+
if (!this.provider) {
|
|
211
|
+
this.init();
|
|
212
|
+
}
|
|
213
|
+
if (!this.provider || !this.provider.generateCode) {
|
|
283
214
|
throw new Error('AI provider does not support Codex responses API');
|
|
284
215
|
}
|
|
285
216
|
const response = await this.provider.generateCode(prompt, {
|
|
@@ -291,134 +222,15 @@ export class CoderAgent extends Agent {
|
|
|
291
222
|
toolContext,
|
|
292
223
|
toolChoice: 'auto',
|
|
293
224
|
maxToolCalls: 3,
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
return this.getMockGeneratedCode(fallbackLanguage, input.task);
|
|
298
|
-
}
|
|
299
|
-
return response;
|
|
300
|
-
}
|
|
301
|
-
/**
|
|
302
|
-
* Generate mock code for demonstration
|
|
303
|
-
*/
|
|
304
|
-
getMockGeneratedCode(language, task) {
|
|
305
|
-
const taskName = task.title.toLowerCase().replace(/\s+/g, '_');
|
|
306
|
-
switch (language) {
|
|
307
|
-
case 'python':
|
|
308
|
-
return `
|
|
309
|
-
"""
|
|
310
|
-
Generated module for: ${task.title}
|
|
311
|
-
"""
|
|
312
|
-
|
|
313
|
-
import logging
|
|
314
|
-
from typing import Any
|
|
315
|
-
|
|
316
|
-
logger = logging.getLogger(__name__)
|
|
317
|
-
|
|
318
|
-
def ${taskName}() -> Any:
|
|
319
|
-
"""${task.description}"""
|
|
320
|
-
try:
|
|
321
|
-
logger.info("Executing ${taskName}")
|
|
322
|
-
# Implementation goes here
|
|
323
|
-
return None
|
|
324
|
-
except Exception as e:
|
|
325
|
-
logger.error(f"Error in ${taskName}: {e}")
|
|
326
|
-
raise
|
|
327
|
-
`;
|
|
328
|
-
case 'go':
|
|
329
|
-
return `
|
|
330
|
-
package main
|
|
331
|
-
|
|
332
|
-
import (
|
|
333
|
-
"fmt"
|
|
334
|
-
"log"
|
|
335
|
-
)
|
|
336
|
-
|
|
337
|
-
// ${task.title}
|
|
338
|
-
func ${this.toPascalCase(taskName)}() error {
|
|
339
|
-
log.Println("Executing ${taskName}")
|
|
340
|
-
// Implementation goes here
|
|
341
|
-
return nil
|
|
342
|
-
}
|
|
343
|
-
`;
|
|
344
|
-
case 'rust':
|
|
345
|
-
return `
|
|
346
|
-
//! Generated module for: ${task.title}
|
|
347
|
-
|
|
348
|
-
use log::{info, error};
|
|
349
|
-
|
|
350
|
-
/// ${task.description}
|
|
351
|
-
pub async fn ${taskName}() -> Result<(), Box<dyn std::error::Error>> {
|
|
352
|
-
info!("Executing ${taskName}");
|
|
353
|
-
// Implementation goes here
|
|
354
|
-
Ok(())
|
|
355
|
-
}
|
|
356
|
-
`;
|
|
357
|
-
case 'csharp':
|
|
358
|
-
return `
|
|
359
|
-
using System;
|
|
360
|
-
using System.Logging;
|
|
361
|
-
|
|
362
|
-
namespace Generated
|
|
363
|
-
{
|
|
364
|
-
/// <summary>
|
|
365
|
-
/// ${task.title}
|
|
366
|
-
/// </summary>
|
|
367
|
-
public class ${this.toPascalCase(taskName)}
|
|
368
|
-
{
|
|
369
|
-
private static readonly ILogger Logger = LoggerFactory.CreateLogger<${this.toPascalCase(taskName)}>();
|
|
370
|
-
|
|
371
|
-
public static void Execute()
|
|
372
|
-
{
|
|
373
|
-
try
|
|
374
|
-
{
|
|
375
|
-
Logger.LogInformation("Executing ${taskName}");
|
|
376
|
-
// Implementation goes here
|
|
377
|
-
}
|
|
378
|
-
catch (Exception ex)
|
|
379
|
-
{
|
|
380
|
-
Logger.LogError(ex, "Error in ${taskName}");
|
|
381
|
-
throw;
|
|
225
|
+
onToolCall: (event) => toolCalls.push(event),
|
|
226
|
+
onTextResponse: (text) => {
|
|
227
|
+
this.logger.info('[Coder] Answered: \n' + text);
|
|
382
228
|
}
|
|
229
|
+
});
|
|
230
|
+
if (typeof response !== 'string') {
|
|
231
|
+
return { response: JSON.stringify(response ?? ''), toolCalls };
|
|
383
232
|
}
|
|
384
|
-
|
|
385
|
-
}
|
|
386
|
-
`;
|
|
387
|
-
case 'typescript':
|
|
388
|
-
default:
|
|
389
|
-
return `
|
|
390
|
-
/**
|
|
391
|
-
* ${task.title}
|
|
392
|
-
*
|
|
393
|
-
* ${task.description}
|
|
394
|
-
*/
|
|
395
|
-
|
|
396
|
-
import { Logger } from './logger';
|
|
397
|
-
|
|
398
|
-
const logger = new Logger('${taskName}');
|
|
399
|
-
|
|
400
|
-
export async function ${taskName}(): Promise<void> {
|
|
401
|
-
try {
|
|
402
|
-
logger.info('Executing ${taskName}');
|
|
403
|
-
// Implementation goes here
|
|
404
|
-
} catch (error) {
|
|
405
|
-
logger.error('Error in ${taskName}', { error });
|
|
406
|
-
throw error;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
export default ${taskName};
|
|
411
|
-
`;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
/**
|
|
415
|
-
* Convert string to PascalCase
|
|
416
|
-
*/
|
|
417
|
-
toPascalCase(str) {
|
|
418
|
-
return str
|
|
419
|
-
.split('_')
|
|
420
|
-
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
421
|
-
.join('');
|
|
233
|
+
return { response, toolCalls };
|
|
422
234
|
}
|
|
423
235
|
buildReuseSection(input) {
|
|
424
236
|
const rawSources = [
|
|
@@ -448,17 +260,6 @@ export default ${taskName};
|
|
|
448
260
|
}
|
|
449
261
|
return normalized.map((item) => `- ${item}`).join('\n');
|
|
450
262
|
}
|
|
451
|
-
async withTimeout(promise, timeoutMs) {
|
|
452
|
-
let timeoutId;
|
|
453
|
-
const timeoutPromise = new Promise((resolve) => {
|
|
454
|
-
timeoutId = setTimeout(() => resolve(null), timeoutMs);
|
|
455
|
-
});
|
|
456
|
-
const result = await Promise.race([promise, timeoutPromise]);
|
|
457
|
-
if (timeoutId) {
|
|
458
|
-
clearTimeout(timeoutId);
|
|
459
|
-
}
|
|
460
|
-
return result;
|
|
461
|
-
}
|
|
462
263
|
buildToolContext(input) {
|
|
463
264
|
const rootPath = input.projectContext?.root ||
|
|
464
265
|
input.projectContext?.rootPath ||
|