galaxy-code 0.1.3 → 0.1.5
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/app.d.ts +1 -1
- package/dist/app.js +5 -5
- package/dist/cli.js +4 -4
- package/dist/connections/claude.d.ts +71 -0
- package/dist/connections/claude.js +303 -0
- package/dist/connections/gemini.d.ts +40 -0
- package/dist/connections/gemini.js +232 -0
- package/dist/connections/index.d.ts +11 -0
- package/dist/connections/index.js +11 -0
- package/dist/connections/ollama.d.ts +37 -0
- package/dist/connections/ollama.js +73 -0
- package/dist/connections/types.d.ts +22 -0
- package/dist/connections/types.js +7 -0
- package/dist/node_modules/@workspace/agent-core/providers/agent-selector.d.ts.map +1 -1
- package/dist/node_modules/@workspace/agent-core/providers/agent-selector.js +18 -18
- package/dist/node_modules/@workspace/agent-core/providers/agent-selector.js.map +1 -1
- package/dist/prompts/ba-it-analyzer.d.ts +1 -0
- package/dist/prompts/ba-it-analyzer.js +143 -0
- package/dist/prompts/index.d.ts +11 -0
- package/dist/prompts/index.js +11 -0
- package/dist/prompts/orchestrator.d.ts +8 -0
- package/dist/prompts/orchestrator.js +88 -0
- package/dist/prompts/planning-agent.d.ts +8 -0
- package/dist/prompts/planning-agent.js +195 -0
- package/dist/prompts/universal-agent.d.ts +7 -0
- package/dist/prompts/universal-agent.js +111 -0
- package/dist/providers/agent-selector.d.ts +29 -0
- package/dist/providers/agent-selector.js +84 -0
- package/dist/providers/claude-agent.d.ts +29 -0
- package/dist/providers/claude-agent.js +121 -0
- package/dist/providers/gemini-agent.d.ts +36 -0
- package/dist/providers/gemini-agent.js +168 -0
- package/dist/providers/index.d.ts +12 -0
- package/dist/providers/index.js +12 -0
- package/dist/providers/ollama-agent.d.ts +53 -0
- package/dist/providers/ollama-agent.js +276 -0
- package/dist/providers/orchestrator.d.ts +16 -0
- package/dist/providers/orchestrator.js +76 -0
- package/dist/tools/ba-it-analyzer.d.ts +66 -0
- package/dist/tools/ba-it-analyzer.js +90 -0
- package/dist/tools/code-generate-agent.d.ts +51 -0
- package/dist/tools/code-generate-agent.js +159 -0
- package/dist/tools/command-runner.d.ts +14 -0
- package/dist/tools/command-runner.js +120 -0
- package/dist/tools/document-parser.d.ts +11 -0
- package/dist/tools/document-parser.js +83 -0
- package/dist/tools/file-operations.d.ts +17 -0
- package/dist/tools/file-operations.js +127 -0
- package/dist/tools/galaxy-ui-integration.d.ts +94 -0
- package/dist/tools/galaxy-ui-integration.js +244 -0
- package/dist/tools/git-operations.d.ts +11 -0
- package/dist/tools/git-operations.js +114 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.js +10 -0
- package/dist/tools/planning-agent.d.ts +29 -0
- package/dist/tools/planning-agent.js +134 -0
- package/dist/tools/progress-reporter.d.ts +19 -0
- package/dist/tools/progress-reporter.js +52 -0
- package/dist/tools/registry.d.ts +21 -0
- package/dist/tools/registry.js +695 -0
- package/dist/tools/tool-event-emitter.d.ts +24 -0
- package/dist/tools/tool-event-emitter.js +25 -0
- package/dist/tools/types.d.ts +31 -0
- package/dist/tools/types.js +1 -0
- package/dist/types.d.ts +1 -1
- package/dist/utils/config-manager.d.ts +102 -0
- package/dist/utils/config-manager.js +326 -0
- package/dist/utils/devtools.d.ts +21 -0
- package/dist/utils/devtools.js +61 -0
- package/dist/utils/message-formatters.d.ts +32 -0
- package/dist/utils/message-formatters.js +590 -0
- package/dist/utils/progress-tracker.d.ts +59 -0
- package/dist/utils/progress-tracker.js +213 -0
- package/package.json +3 -2
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create 2024-10-08
|
|
5
|
+
* @modify 2024-10-13
|
|
6
|
+
* @desc Gemini connection helper using @google/genai with improved function call handling.
|
|
7
|
+
*/
|
|
8
|
+
import { GoogleGenAI, Type, } from '@google/genai';
|
|
9
|
+
import { globalToolRegistry } from '../tools/registry.js';
|
|
10
|
+
const geminiModel = 'gemini-2.5-flash';
|
|
11
|
+
export class GeminiConnection {
|
|
12
|
+
constructor(config, systemPrompt) {
|
|
13
|
+
Object.defineProperty(this, "client", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
writable: true,
|
|
17
|
+
value: void 0
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(this, "apiKey", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
configurable: true,
|
|
22
|
+
writable: true,
|
|
23
|
+
value: void 0
|
|
24
|
+
});
|
|
25
|
+
Object.defineProperty(this, "chatSession", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
configurable: true,
|
|
28
|
+
writable: true,
|
|
29
|
+
value: void 0
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(this, "systemInstruction", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
configurable: true,
|
|
34
|
+
writable: true,
|
|
35
|
+
value: void 0
|
|
36
|
+
});
|
|
37
|
+
Object.defineProperty(this, "model", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
writable: true,
|
|
41
|
+
value: void 0
|
|
42
|
+
});
|
|
43
|
+
Object.defineProperty(this, "toolsRegistry", {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
configurable: true,
|
|
46
|
+
writable: true,
|
|
47
|
+
value: globalToolRegistry
|
|
48
|
+
});
|
|
49
|
+
// Only get apiKey from config - no fallback to env
|
|
50
|
+
this.apiKey = config?.apiKey;
|
|
51
|
+
this.model = config?.model ?? 'gemini-2.5-flash';
|
|
52
|
+
this.client = new GoogleGenAI({ apiKey: this.apiKey });
|
|
53
|
+
this.systemInstruction = systemPrompt;
|
|
54
|
+
this.initChat();
|
|
55
|
+
}
|
|
56
|
+
initChat() {
|
|
57
|
+
this.chatSession = this.client.chats.create({
|
|
58
|
+
model: this.model,
|
|
59
|
+
config: {
|
|
60
|
+
systemInstruction: this.systemInstruction,
|
|
61
|
+
tools: [{ functionDeclarations: this.getToolDeclarations() }],
|
|
62
|
+
temperature: 0.7,
|
|
63
|
+
thinkingConfig: {
|
|
64
|
+
thinkingBudget: 0,
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
async generate(parameters) {
|
|
70
|
+
const response = await this.client.models.generateContent({
|
|
71
|
+
model: geminiModel,
|
|
72
|
+
contents: parameters.prompt,
|
|
73
|
+
});
|
|
74
|
+
const text = response.text ?? '';
|
|
75
|
+
return { text, raw: response };
|
|
76
|
+
}
|
|
77
|
+
async chat(message, onMessage) {
|
|
78
|
+
if (!this.chatSession) {
|
|
79
|
+
throw new Error('Chat session is not initialized.');
|
|
80
|
+
}
|
|
81
|
+
let currentMessage = message;
|
|
82
|
+
let response;
|
|
83
|
+
let iteration = 0;
|
|
84
|
+
const MAX_ITERATIONS = 15; // Tăng lên vì xử lý từng tool một
|
|
85
|
+
while (currentMessage && iteration < MAX_ITERATIONS) {
|
|
86
|
+
iteration++;
|
|
87
|
+
response = await this.chatSession.sendMessage({
|
|
88
|
+
message: currentMessage,
|
|
89
|
+
});
|
|
90
|
+
if (response.functionCalls && response.functionCalls.length > 0) {
|
|
91
|
+
const functionResponses = [];
|
|
92
|
+
// **IMPROVED: Sequential execution với early feedback**
|
|
93
|
+
for (const functionCall of response.functionCalls) {
|
|
94
|
+
try {
|
|
95
|
+
const toolName = functionCall.name || 'unknown';
|
|
96
|
+
const args = functionCall.args || {};
|
|
97
|
+
const toolResult = await this.toolsRegistry.executeTool(toolName, args);
|
|
98
|
+
const resultStr = typeof toolResult === 'string' ? toolResult : JSON.stringify(toolResult);
|
|
99
|
+
if (onMessage) {
|
|
100
|
+
// Pass tool execution info for better formatting
|
|
101
|
+
const toolInfo = {
|
|
102
|
+
toolName,
|
|
103
|
+
args,
|
|
104
|
+
result: toolResult,
|
|
105
|
+
};
|
|
106
|
+
onMessage('tool', resultStr, toolName, toolInfo);
|
|
107
|
+
}
|
|
108
|
+
functionResponses.push({
|
|
109
|
+
functionResponse: {
|
|
110
|
+
name: functionCall.name,
|
|
111
|
+
response: { result: resultStr },
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
// **NEW: Cho phép xử lý từng tool một nếu cần**
|
|
115
|
+
// Nếu có nhiều function calls, có thể break ở đây để feedback sớm
|
|
116
|
+
// Nhưng hiện tại vẫn xử lý hết để tương thích
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
120
|
+
// Log error
|
|
121
|
+
if (onMessage) {
|
|
122
|
+
const toolInfo = {
|
|
123
|
+
toolName: functionCall.name || 'unknown',
|
|
124
|
+
args: functionCall.args || {},
|
|
125
|
+
result: `❌ Error: ${errorMsg}`,
|
|
126
|
+
};
|
|
127
|
+
onMessage('tool', `❌ Error: ${errorMsg}`, functionCall.name, toolInfo);
|
|
128
|
+
}
|
|
129
|
+
functionResponses.push({
|
|
130
|
+
functionResponse: {
|
|
131
|
+
name: functionCall.name,
|
|
132
|
+
response: {
|
|
133
|
+
error: errorMsg,
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
// **NEW: Stop on critical errors**
|
|
138
|
+
// Nếu là lỗi nghiêm trọng, có thể break để không lãng phí
|
|
139
|
+
// nhưng hiện tại vẫn tiếp tục để AI có đầy đủ context
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Gửi tất cả function responses
|
|
143
|
+
currentMessage = functionResponses;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Không có function calls → trả về text response
|
|
147
|
+
return response.text ?? '';
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (iteration >= MAX_ITERATIONS) {
|
|
151
|
+
console.warn(`⚠️ Max iterations (${MAX_ITERATIONS}) reached. This may indicate:`);
|
|
152
|
+
console.warn(' - Too many sequential tool calls');
|
|
153
|
+
console.warn(' - AI stuck in a reasoning loop');
|
|
154
|
+
console.warn(' - Consider reviewing system prompt or tool definitions');
|
|
155
|
+
throw new Error(`Max iterations (${MAX_ITERATIONS}) reached`);
|
|
156
|
+
}
|
|
157
|
+
return '';
|
|
158
|
+
}
|
|
159
|
+
getToolDeclarations() {
|
|
160
|
+
const tools = this.toolsRegistry.list();
|
|
161
|
+
return tools.map(tool => this.convertToFunctionDeclaration(tool));
|
|
162
|
+
}
|
|
163
|
+
convertToFunctionDeclaration(tool) {
|
|
164
|
+
return {
|
|
165
|
+
name: tool.name,
|
|
166
|
+
description: tool.description,
|
|
167
|
+
parameters: this.convertSchemaToGeminiSchema(tool.inputSchema),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
convertSchemaToGeminiSchema(schema) {
|
|
171
|
+
if (!schema) {
|
|
172
|
+
return {
|
|
173
|
+
type: Type.OBJECT,
|
|
174
|
+
properties: {},
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const converted = {
|
|
178
|
+
type: Type.OBJECT,
|
|
179
|
+
properties: {},
|
|
180
|
+
};
|
|
181
|
+
if (schema['properties']) {
|
|
182
|
+
converted.properties = {};
|
|
183
|
+
for (const [key, value] of Object.entries(schema['properties'])) {
|
|
184
|
+
const prop = value;
|
|
185
|
+
converted.properties[key] = this.convertPropertyToGeminiSchema(prop);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (schema['required']) {
|
|
189
|
+
converted.required = schema['required'];
|
|
190
|
+
}
|
|
191
|
+
return converted;
|
|
192
|
+
}
|
|
193
|
+
convertPropertyToGeminiSchema(prop) {
|
|
194
|
+
const propSchema = {
|
|
195
|
+
type: this.mapTypeToGemini(prop.type),
|
|
196
|
+
description: prop.description || '',
|
|
197
|
+
};
|
|
198
|
+
if (prop.type === 'object' && prop.properties) {
|
|
199
|
+
propSchema.properties = {};
|
|
200
|
+
for (const [key, value] of Object.entries(prop.properties)) {
|
|
201
|
+
propSchema.properties[key] = this.convertPropertyToGeminiSchema(value);
|
|
202
|
+
}
|
|
203
|
+
if (prop.required) {
|
|
204
|
+
propSchema.required = prop.required;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (prop.type === 'array') {
|
|
208
|
+
if (prop.items && typeof prop.items === 'object') {
|
|
209
|
+
propSchema.items = this.convertPropertyToGeminiSchema(prop.items);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
// Gemini requires items field for arrays
|
|
213
|
+
propSchema.items = {
|
|
214
|
+
type: Type.STRING,
|
|
215
|
+
description: '',
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return propSchema;
|
|
220
|
+
}
|
|
221
|
+
mapTypeToGemini(type) {
|
|
222
|
+
const typeMap = {
|
|
223
|
+
string: Type.STRING,
|
|
224
|
+
number: Type.NUMBER,
|
|
225
|
+
integer: Type.INTEGER,
|
|
226
|
+
boolean: Type.BOOLEAN,
|
|
227
|
+
object: Type.OBJECT,
|
|
228
|
+
array: Type.ARRAY,
|
|
229
|
+
};
|
|
230
|
+
return typeMap[type.toLowerCase()] || Type.STRING;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create 2024-10-08
|
|
5
|
+
* @modify 2024-10-13
|
|
6
|
+
* @desc Export entry for connection modules.
|
|
7
|
+
*/
|
|
8
|
+
export * from './types.js';
|
|
9
|
+
export * from './ollama.js';
|
|
10
|
+
export * from './gemini.js';
|
|
11
|
+
export * from './claude.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create 2024-10-08
|
|
5
|
+
* @modify 2024-10-13
|
|
6
|
+
* @desc Export entry for connection modules.
|
|
7
|
+
*/
|
|
8
|
+
export * from './types.js';
|
|
9
|
+
export * from './ollama.js';
|
|
10
|
+
export * from './gemini.js';
|
|
11
|
+
export * from './claude.js';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create 2024-10-08
|
|
5
|
+
* @modify 2024-10-08
|
|
6
|
+
* @desc Ollama connection helper wrapping chat completion endpoint.
|
|
7
|
+
*/
|
|
8
|
+
import { ChatResponse, GenerateResponse, Message } from 'ollama';
|
|
9
|
+
import type { AgentConfig } from '../utils/config-manager.js';
|
|
10
|
+
export declare const ollamaModels: readonly ["deepseek-v3.1:671b-cloud", "gpt-oss:120b-cloud", "qwen3-coder:480b-cloud"];
|
|
11
|
+
export type OllamaModelId = (typeof ollamaModels)[number];
|
|
12
|
+
export type OllamaGenerateParameters = {
|
|
13
|
+
readonly prompt: string;
|
|
14
|
+
readonly model: OllamaModelId;
|
|
15
|
+
readonly system?: string;
|
|
16
|
+
};
|
|
17
|
+
export type OllamaGenerateResult<T = unknown> = {
|
|
18
|
+
readonly text: string;
|
|
19
|
+
readonly raw: T;
|
|
20
|
+
};
|
|
21
|
+
export declare class OllamaConnection {
|
|
22
|
+
private ollama;
|
|
23
|
+
private model;
|
|
24
|
+
constructor(config?: AgentConfig | {
|
|
25
|
+
model?: OllamaModelId;
|
|
26
|
+
host?: string;
|
|
27
|
+
apiKey?: string;
|
|
28
|
+
});
|
|
29
|
+
generate(parameters: OllamaGenerateParameters): Promise<GenerateResponse>;
|
|
30
|
+
chat(userMessage: string): Promise<string>;
|
|
31
|
+
chatWithTools(options: {
|
|
32
|
+
model: string;
|
|
33
|
+
messages: Message[];
|
|
34
|
+
tools?: any[];
|
|
35
|
+
stream?: false;
|
|
36
|
+
}): Promise<ChatResponse>;
|
|
37
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create 2024-10-08
|
|
5
|
+
* @modify 2024-10-08
|
|
6
|
+
* @desc Ollama connection helper wrapping chat completion endpoint.
|
|
7
|
+
*/
|
|
8
|
+
import { Ollama } from 'ollama';
|
|
9
|
+
export const ollamaModels = [
|
|
10
|
+
'deepseek-v3.1:671b-cloud',
|
|
11
|
+
'gpt-oss:120b-cloud',
|
|
12
|
+
'qwen3-coder:480b-cloud',
|
|
13
|
+
];
|
|
14
|
+
export class OllamaConnection {
|
|
15
|
+
constructor(config) {
|
|
16
|
+
Object.defineProperty(this, "ollama", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: void 0
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(this, "model", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: 'deepseek-v3.1:671b-cloud'
|
|
27
|
+
});
|
|
28
|
+
this.model = config?.model ?? this.model;
|
|
29
|
+
const host = config?.host ?? 'https://ollama.com';
|
|
30
|
+
// If using ollama.com cloud, need API key
|
|
31
|
+
const needsApiKey = host === 'https://ollama.com' || host.includes('ollama.com');
|
|
32
|
+
// Only get apiKey from config - no fallback to env
|
|
33
|
+
const apiKey = config?.apiKey;
|
|
34
|
+
// if (needsApiKey && !apiKey) {
|
|
35
|
+
// console.log('Hiện tại bạn chưa thêm apikey cho model ollama. Vui lòng thêm để dùng phần mềm')
|
|
36
|
+
// }
|
|
37
|
+
this.ollama = new Ollama({
|
|
38
|
+
host: host,
|
|
39
|
+
headers: needsApiKey
|
|
40
|
+
? {
|
|
41
|
+
Authorization: 'Bearer ' + apiKey,
|
|
42
|
+
}
|
|
43
|
+
: {},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async generate(parameters) {
|
|
47
|
+
const response = await this.ollama.generate({
|
|
48
|
+
model: parameters.model || this.model,
|
|
49
|
+
prompt: parameters.prompt,
|
|
50
|
+
system: parameters.system,
|
|
51
|
+
stream: false,
|
|
52
|
+
});
|
|
53
|
+
return response;
|
|
54
|
+
}
|
|
55
|
+
// Simple chat method for direct conversation (matches GeminiConnection/ClaudeConnection)
|
|
56
|
+
async chat(userMessage) {
|
|
57
|
+
const response = await this.ollama.chat({
|
|
58
|
+
model: this.model,
|
|
59
|
+
messages: [{ role: 'user', content: userMessage }],
|
|
60
|
+
stream: false,
|
|
61
|
+
});
|
|
62
|
+
return response.message.content;
|
|
63
|
+
}
|
|
64
|
+
// Advanced chat with tools (used by ollama-agent)
|
|
65
|
+
async chatWithTools(options) {
|
|
66
|
+
return await this.ollama.chat({
|
|
67
|
+
model: options.model,
|
|
68
|
+
messages: options.messages,
|
|
69
|
+
tools: options.tools,
|
|
70
|
+
stream: false,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create 2025-10-22
|
|
5
|
+
* @desc Shared types for connection classes
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Tool execution information for callbacks
|
|
9
|
+
* Supports both Gemini and Claude patterns
|
|
10
|
+
*/
|
|
11
|
+
export interface ToolExecutionInfo {
|
|
12
|
+
success?: boolean;
|
|
13
|
+
output?: string;
|
|
14
|
+
error?: string;
|
|
15
|
+
toolName?: string;
|
|
16
|
+
args?: any;
|
|
17
|
+
result?: any;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Message callback type for agent notifications
|
|
21
|
+
*/
|
|
22
|
+
export type MessageCallback = (author: 'user' | 'assistant' | 'system' | 'tool', content: string, toolName?: string, toolInfo?: ToolExecutionInfo) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-selector.d.ts","sourceRoot":"","sources":["../../src/providers/agent-selector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"agent-selector.d.ts","sourceRoot":"","sources":["../../src/providers/agent-selector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAC,YAAY,EAAc,MAAM,4BAA4B,CAAC;AAM1E,MAAM,WAAW,cAAc;IAC9B,eAAe,CACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACT,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;KACrB,EACD,SAAS,CAAC,EAAE,CACX,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,EAChD,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,GAAG,KACV,IAAI,GACP,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,GAAG,IAAI,CA2CvE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA0BhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAG5C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// import {orchestratorAgent} from './orchestrator.js';
|
|
2
2
|
import { claudeAgent } from './claude-agent.js';
|
|
3
|
-
import {
|
|
3
|
+
import { OllamaAgent } from './ollama-agent.js';
|
|
4
4
|
import { geminiAgent } from './gemini-agent.js';
|
|
5
5
|
/**
|
|
6
6
|
* Select appropriate agent based on Galaxy config
|
|
@@ -11,13 +11,22 @@ export function selectAgent(config) {
|
|
|
11
11
|
const agentArray = config.agent;
|
|
12
12
|
if (!agentArray || agentArray.length === 0) {
|
|
13
13
|
console.warn('⚠️ No agents configured. Using Ollama agent as default.');
|
|
14
|
-
return
|
|
14
|
+
return new OllamaAgent();
|
|
15
15
|
}
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
// Check for manual mode first - both CLI and VSCode should use Ollama with qwen3-coder:480b-cloud
|
|
17
|
+
const manualAgent = agentArray.find((a) => a.type === 'manual');
|
|
18
|
+
if (manualAgent) {
|
|
19
|
+
// Use Ollama Agent with qwen3-coder:480b-cloud model for manual mode
|
|
20
|
+
const manualAgentConfig = {
|
|
21
|
+
type: 'ollama',
|
|
22
|
+
model: 'qwen3-coder:480b-cloud',
|
|
23
|
+
host: 'https://ollama.com',
|
|
24
|
+
apiKey: manualAgent.apiKey,
|
|
25
|
+
};
|
|
26
|
+
return new OllamaAgent(manualAgentConfig);
|
|
27
|
+
}
|
|
28
|
+
// For non-manual modes, find first working agent (claude, gemini, or ollama)
|
|
29
|
+
const primaryAgent = agentArray.find((a) => a.type === 'claude' || a.type === 'gemini' || a.type === 'ollama') ?? agentArray[0];
|
|
21
30
|
switch (primaryAgent.type) {
|
|
22
31
|
case 'claude':
|
|
23
32
|
// Use Claude Agent with full tool access
|
|
@@ -27,20 +36,11 @@ export function selectAgent(config) {
|
|
|
27
36
|
return geminiAgent.instance;
|
|
28
37
|
case 'ollama':
|
|
29
38
|
// Use Ollama Agent with full tool access
|
|
30
|
-
return
|
|
31
|
-
case 'manual':
|
|
32
|
-
// Manual mode - orchestrator not implemented for VSCode yet
|
|
33
|
-
// Fall back to Gemini if available
|
|
34
|
-
const fallbackAgent = agentArray.find((a) => a.type === 'gemini' || a.type === 'claude' || a.type === 'ollama');
|
|
35
|
-
if (fallbackAgent) {
|
|
36
|
-
console.warn('⚠️ Manual mode not supported in VSCode. Using', fallbackAgent.type);
|
|
37
|
-
return selectAgent({ ...config, agent: [fallbackAgent] });
|
|
38
|
-
}
|
|
39
|
-
return null;
|
|
39
|
+
return new OllamaAgent(primaryAgent);
|
|
40
40
|
default:
|
|
41
41
|
// Default to Ollama agent
|
|
42
42
|
console.warn('⚠️ Unknown agent type. Using Ollama agent.');
|
|
43
|
-
return
|
|
43
|
+
return new OllamaAgent();
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-selector.js","sourceRoot":"","sources":["../../src/providers/agent-selector.ts"],"names":[],"mappings":"AAQA,uDAAuD;AACvD,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAkB9C;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC/C,yBAAyB;IACzB,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;IAEhC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACxE,OAAO,WAAW,
|
|
1
|
+
{"version":3,"file":"agent-selector.js","sourceRoot":"","sources":["../../src/providers/agent-selector.ts"],"names":[],"mappings":"AAQA,uDAAuD;AACvD,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAkB9C;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC/C,yBAAyB;IACzB,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;IAEhC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACxE,OAAO,IAAI,WAAW,EAAE,CAAC;IAC1B,CAAC;IAED,kGAAkG;IAClG,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAChE,IAAI,WAAW,EAAE,CAAC;QACjB,qEAAqE;QACrE,MAAM,iBAAiB,GAAgB;YACtC,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,wBAAwB;YAC/B,IAAI,EAAE,oBAAoB;YAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;SAC1B,CAAC;QACF,OAAO,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAC3C,CAAC;IAED,6EAA6E;IAC7E,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAEhI,QAAQ,YAAY,CAAC,IAAI,EAAE,CAAC;QAC3B,KAAK,QAAQ;YACZ,yCAAyC;YACzC,OAAO,WAAW,CAAC,QAAQ,CAAC;QAE7B,KAAK,QAAQ;YACZ,yCAAyC;YACzC,OAAO,WAAW,CAAC,QAAQ,CAAC;QAE7B,KAAK,QAAQ;YACZ,yCAAyC;YACzC,OAAO,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC;QAEtC;YACC,0BAA0B;YAC1B,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;YAC3D,OAAO,IAAI,WAAW,EAAE,CAAC;IAC3B,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACvD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;IAEhC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,kBAAkB,CAAC;IAC3B,CAAC;IAED,qDAAqD;IACrD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAElF,QAAQ,YAAY,CAAC,IAAI,EAAE,CAAC;QAC3B,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAC;QAEjB,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAC;QAEjB,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAC;QAEjB,KAAK,QAAQ;YACZ,OAAO,uBAAuB,CAAC;QAEhC;YACC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IACjC,2BAA2B;IAC3B,OAAO,IAAI,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const systemBAITAnalyzerPrompt = "You are an EXPERT BUSINESS ANALYST for IT projects.\n\n# Your Role:\nAnalyze user requests and create COMPREHENSIVE project specifications including:\n1. Type: create_project (new) or update_project (add feature to existing)\n2. Core Features (must-have vs nice-to-have)\n3. Technical Stack recommendations\n4. User Stories with acceptance criteria\n5. Data Model (entities, attributes, relationships)\n6. API endpoints for backend systems\n7. Complexity + time estimate\n8. Best practices & recommendations\n9. Clarification questions\n\n# Language Rule:\n**ALWAYS respond in ENGLISH** regardless of user's input language.\n- All field values (descriptions, names, recommendations, etc.) MUST be in English\n- This ensures consistent output format for downstream tools (planning, code generation)\n\n# Output Format (VALID JSON - ALL content in English):\n{\n \"type\": \"create_project | update_project\",\n \"projectName\": \"Project name\",\n \"projectType\": \"web-app | mobile-app | api | full-stack | desktop-app\",\n \"description\": \"Brief summary\",\n \"coreFeatures\": [\n {\n \"name\": \"Feature name\",\n \"description\": \"Description\",\n \"priority\": \"must-have | should-have | nice-to-have\",\n \"userStory\": \"As a [user], I want [feature] so that [benefit]\",\n \"acceptanceCriteria\": [\"Criterion 1\", \"Criterion 2\"]\n }\n ],\n \"technicalStack\": {\n \"frontend\": [\"React\", \"TypeScript\"],\n \"backend\": [\"Node.js\", \"Express\"],\n \"database\": [\"PostgreSQL\"],\n \"thirdParty\": [\"Stripe\"]\n },\n \"userStories\": [\n {\n \"as\": \"role\",\n \"iWant\": \"feature\",\n \"soThat\": \"benefit\",\n \"acceptanceCriteria\": [\"Given [context], when [action], then [result]\"]\n }\n ],\n \"dataModel\": [\n {\n \"name\": \"Entity\",\n \"description\": \"Purpose\",\n \"attributes\": [\"id\", \"name\", \"createdAt\"],\n \"relationships\": [\"User has many Orders\"]\n }\n ],\n \"apiEndpoints\": [\n {\n \"method\": \"GET | POST | PUT | DELETE\",\n \"path\": \"/api/resource\",\n \"description\": \"Purpose\",\n \"response\": \"{ data: [] }\"\n }\n ],\n \"estimatedComplexity\": \"simple | medium | complex\",\n \"estimatedTime\": \"1-2 weeks | 2-4 weeks | 1-3 months\",\n \"recommendations\": [\"Recommendation with reasoning\"],\n \"questionsForUser\": [\"Clarification question\"]\n}\n\n# Example:\n\nUser: \"Create an online phone store\"\n\n{\n \"type\": \"create_project\",\n \"projectName\": \"Phone Store E-Commerce\",\n \"projectType\": \"full-stack\",\n \"description\": \"E-commerce platform for selling phones with product catalog, cart, checkout, and order management\",\n \"coreFeatures\": [\n {\n \"name\": \"Product Catalog\",\n \"description\": \"Display phones with images, prices, specs. Filter by brand, price, features. Search by name.\",\n \"priority\": \"must-have\",\n \"userStory\": \"As a customer, I want to browse phones with filters to find suitable products\",\n \"acceptanceCriteria\": [\"Grid/list view\", \"Filter by brand/price\", \"Real-time search\", \"Pagination\"]\n },\n {\n \"name\": \"Shopping Cart\",\n \"description\": \"Add products, update quantity, remove items, calculate total\",\n \"priority\": \"must-have\",\n \"userStory\": \"As a customer, I want to manage my cart to buy multiple products\",\n \"acceptanceCriteria\": [\"Add to cart\", \"Update quantity\", \"Remove items\", \"Calculate total\"]\n }\n ],\n \"technicalStack\": {\n \"frontend\": [\"Next.js\", \"TypeScript\", \"Tailwind\"],\n \"backend\": [\"Node.js\", \"Express\"],\n \"database\": [\"PostgreSQL\", \"Redis\"],\n \"thirdParty\": [\"Stripe\"]\n },\n \"userStories\": [\n {\n \"as\": \"customer\",\n \"iWant\": \"filter products by brand\",\n \"soThat\": \"find phones quickly\",\n \"acceptanceCriteria\": [\"Given home page, when filter 'Samsung', then show Samsung phones\"]\n }\n ],\n \"dataModel\": [\n {\n \"name\": \"Product\",\n \"description\": \"Phone product\",\n \"attributes\": [\"id\", \"name\", \"brand\", \"price\", \"stock\"],\n \"relationships\": [\"Product has many OrderItems\"]\n }\n ],\n \"apiEndpoints\": [\n {\n \"method\": \"GET\",\n \"path\": \"/api/products\",\n \"description\": \"Get product list\",\n \"response\": \"{ products: Product[] }\"\n }\n ],\n \"estimatedComplexity\": \"complex\",\n \"estimatedTime\": \"2-4 weeks\",\n \"recommendations\": [\n \"Use Next.js App Router for SSR and SEO\",\n \"Implement Redis caching for product listing\"\n ],\n \"questionsForUser\": [\n \"Online payment (Stripe) or COD only?\",\n \"Multi-language support needed?\"\n ]\n}\n\nCRITICAL:\n- VALID JSON ONLY (no markdown)\n- COMPREHENSIVE MVP features\n- Use user's language throughout\n- SPECIFIC technical recommendations\n- Realistic feature prioritization";
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
export const systemBAITAnalyzerPrompt = `You are an EXPERT BUSINESS ANALYST for IT projects.
|
|
2
|
+
|
|
3
|
+
# Your Role:
|
|
4
|
+
Analyze user requests and create COMPREHENSIVE project specifications including:
|
|
5
|
+
1. Type: create_project (new) or update_project (add feature to existing)
|
|
6
|
+
2. Core Features (must-have vs nice-to-have)
|
|
7
|
+
3. Technical Stack recommendations
|
|
8
|
+
4. User Stories with acceptance criteria
|
|
9
|
+
5. Data Model (entities, attributes, relationships)
|
|
10
|
+
6. API endpoints for backend systems
|
|
11
|
+
7. Complexity + time estimate
|
|
12
|
+
8. Best practices & recommendations
|
|
13
|
+
9. Clarification questions
|
|
14
|
+
|
|
15
|
+
# Language Rule:
|
|
16
|
+
**ALWAYS respond in ENGLISH** regardless of user's input language.
|
|
17
|
+
- All field values (descriptions, names, recommendations, etc.) MUST be in English
|
|
18
|
+
- This ensures consistent output format for downstream tools (planning, code generation)
|
|
19
|
+
|
|
20
|
+
# Output Format (VALID JSON - ALL content in English):
|
|
21
|
+
{
|
|
22
|
+
"type": "create_project | update_project",
|
|
23
|
+
"projectName": "Project name",
|
|
24
|
+
"projectType": "web-app | mobile-app | api | full-stack | desktop-app",
|
|
25
|
+
"description": "Brief summary",
|
|
26
|
+
"coreFeatures": [
|
|
27
|
+
{
|
|
28
|
+
"name": "Feature name",
|
|
29
|
+
"description": "Description",
|
|
30
|
+
"priority": "must-have | should-have | nice-to-have",
|
|
31
|
+
"userStory": "As a [user], I want [feature] so that [benefit]",
|
|
32
|
+
"acceptanceCriteria": ["Criterion 1", "Criterion 2"]
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"technicalStack": {
|
|
36
|
+
"frontend": ["React", "TypeScript"],
|
|
37
|
+
"backend": ["Node.js", "Express"],
|
|
38
|
+
"database": ["PostgreSQL"],
|
|
39
|
+
"thirdParty": ["Stripe"]
|
|
40
|
+
},
|
|
41
|
+
"userStories": [
|
|
42
|
+
{
|
|
43
|
+
"as": "role",
|
|
44
|
+
"iWant": "feature",
|
|
45
|
+
"soThat": "benefit",
|
|
46
|
+
"acceptanceCriteria": ["Given [context], when [action], then [result]"]
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"dataModel": [
|
|
50
|
+
{
|
|
51
|
+
"name": "Entity",
|
|
52
|
+
"description": "Purpose",
|
|
53
|
+
"attributes": ["id", "name", "createdAt"],
|
|
54
|
+
"relationships": ["User has many Orders"]
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"apiEndpoints": [
|
|
58
|
+
{
|
|
59
|
+
"method": "GET | POST | PUT | DELETE",
|
|
60
|
+
"path": "/api/resource",
|
|
61
|
+
"description": "Purpose",
|
|
62
|
+
"response": "{ data: [] }"
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"estimatedComplexity": "simple | medium | complex",
|
|
66
|
+
"estimatedTime": "1-2 weeks | 2-4 weeks | 1-3 months",
|
|
67
|
+
"recommendations": ["Recommendation with reasoning"],
|
|
68
|
+
"questionsForUser": ["Clarification question"]
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
# Example:
|
|
72
|
+
|
|
73
|
+
User: "Create an online phone store"
|
|
74
|
+
|
|
75
|
+
{
|
|
76
|
+
"type": "create_project",
|
|
77
|
+
"projectName": "Phone Store E-Commerce",
|
|
78
|
+
"projectType": "full-stack",
|
|
79
|
+
"description": "E-commerce platform for selling phones with product catalog, cart, checkout, and order management",
|
|
80
|
+
"coreFeatures": [
|
|
81
|
+
{
|
|
82
|
+
"name": "Product Catalog",
|
|
83
|
+
"description": "Display phones with images, prices, specs. Filter by brand, price, features. Search by name.",
|
|
84
|
+
"priority": "must-have",
|
|
85
|
+
"userStory": "As a customer, I want to browse phones with filters to find suitable products",
|
|
86
|
+
"acceptanceCriteria": ["Grid/list view", "Filter by brand/price", "Real-time search", "Pagination"]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "Shopping Cart",
|
|
90
|
+
"description": "Add products, update quantity, remove items, calculate total",
|
|
91
|
+
"priority": "must-have",
|
|
92
|
+
"userStory": "As a customer, I want to manage my cart to buy multiple products",
|
|
93
|
+
"acceptanceCriteria": ["Add to cart", "Update quantity", "Remove items", "Calculate total"]
|
|
94
|
+
}
|
|
95
|
+
],
|
|
96
|
+
"technicalStack": {
|
|
97
|
+
"frontend": ["Next.js", "TypeScript", "Tailwind"],
|
|
98
|
+
"backend": ["Node.js", "Express"],
|
|
99
|
+
"database": ["PostgreSQL", "Redis"],
|
|
100
|
+
"thirdParty": ["Stripe"]
|
|
101
|
+
},
|
|
102
|
+
"userStories": [
|
|
103
|
+
{
|
|
104
|
+
"as": "customer",
|
|
105
|
+
"iWant": "filter products by brand",
|
|
106
|
+
"soThat": "find phones quickly",
|
|
107
|
+
"acceptanceCriteria": ["Given home page, when filter 'Samsung', then show Samsung phones"]
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"dataModel": [
|
|
111
|
+
{
|
|
112
|
+
"name": "Product",
|
|
113
|
+
"description": "Phone product",
|
|
114
|
+
"attributes": ["id", "name", "brand", "price", "stock"],
|
|
115
|
+
"relationships": ["Product has many OrderItems"]
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
"apiEndpoints": [
|
|
119
|
+
{
|
|
120
|
+
"method": "GET",
|
|
121
|
+
"path": "/api/products",
|
|
122
|
+
"description": "Get product list",
|
|
123
|
+
"response": "{ products: Product[] }"
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
"estimatedComplexity": "complex",
|
|
127
|
+
"estimatedTime": "2-4 weeks",
|
|
128
|
+
"recommendations": [
|
|
129
|
+
"Use Next.js App Router for SSR and SEO",
|
|
130
|
+
"Implement Redis caching for product listing"
|
|
131
|
+
],
|
|
132
|
+
"questionsForUser": [
|
|
133
|
+
"Online payment (Stripe) or COD only?",
|
|
134
|
+
"Multi-language support needed?"
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
CRITICAL:
|
|
139
|
+
- VALID JSON ONLY (no markdown)
|
|
140
|
+
- COMPREHENSIVE MVP features
|
|
141
|
+
- Use user's language throughout
|
|
142
|
+
- SPECIFIC technical recommendations
|
|
143
|
+
- Realistic feature prioritization`;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create 2024-10-08
|
|
5
|
+
* @modify 2024-10-08
|
|
6
|
+
* @desc Barrel exports for prompt definitions.
|
|
7
|
+
*/
|
|
8
|
+
export * from './orchestrator.js';
|
|
9
|
+
export * from './universal-agent.js';
|
|
10
|
+
export * from './planning-agent.js';
|
|
11
|
+
export * from './ba-it-analyzer.js';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create 2024-10-08
|
|
5
|
+
* @modify 2024-10-08
|
|
6
|
+
* @desc Barrel exports for prompt definitions.
|
|
7
|
+
*/
|
|
8
|
+
export * from './orchestrator.js';
|
|
9
|
+
export * from './universal-agent.js';
|
|
10
|
+
export * from './planning-agent.js';
|
|
11
|
+
export * from './ba-it-analyzer.js';
|