@bluehawks/cli 1.0.12 → 1.0.14
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/.bluehawks/history.json +29 -5
- package/dist/config/constants.d.ts +1 -1
- package/dist/config/constants.js +1 -1
- package/dist/core/agents/agent.d.ts +4 -1
- package/dist/core/agents/agent.d.ts.map +1 -1
- package/dist/core/agents/agent.js +24 -15
- package/dist/core/agents/agent.js.map +1 -1
- package/dist/core/agents/orchestrator.d.ts +1 -0
- package/dist/core/agents/orchestrator.d.ts.map +1 -1
- package/dist/core/agents/orchestrator.js +25 -11
- package/dist/core/agents/orchestrator.js.map +1 -1
- package/package.json +1 -1
- package/src/config/constants.ts +1 -1
- package/src/core/agents/agent.ts +26 -17
- package/src/core/agents/orchestrator.ts +31 -12
package/.bluehawks/history.json
CHANGED
|
@@ -1,14 +1,38 @@
|
|
|
1
1
|
{
|
|
2
|
-
"id": "
|
|
3
|
-
"startTime": "2026-02-09T14:45
|
|
2
|
+
"id": "session_1770648705207_uwebwa",
|
|
3
|
+
"startTime": "2026-02-09T14:51:45.207Z",
|
|
4
4
|
"messages": [
|
|
5
5
|
{
|
|
6
6
|
"role": "user",
|
|
7
|
-
"content": "
|
|
7
|
+
"content": "what does the file client.ts do?"
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"role": "assistant",
|
|
11
|
-
"content": "
|
|
11
|
+
"content": "I don't see a `client.ts` file in the current directory structure you've provided. The available files are:\n\n- `README.md`\n- `package-lock.json`\n- `package.json`\n- `tsconfig.json`\n- `vitest.config.ts`\n- A `src` directory (which may contain source code)\n\nSince there's no `client.ts` file in the listed files, I can't describe what it does. It's possible that:\n\n1. The file exists in a subdirectory of `src`\n2. It was created after the current directory listing was generated\n3. It's a file that wasn't included in the current context\n\nTo help you further, I'd need to either:\n- Check if `client.ts` exists in the `src` directory\n- Provide more context about your project structure\n\nWould you like me to search for `client.ts` in the project?"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"role": "user",
|
|
15
|
+
"content": "yes please"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"role": "assistant",
|
|
19
|
+
"content": "Hello! I'm Bluehawks, your AI coding assistant. How can I help you with your codebase today? Whether you need help with debugging, refactoring, adding new features, or understanding existing code, just let me know what you'd like to accomplish! 😊"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"role": "user",
|
|
23
|
+
"content": "what does the file client.ts conatin?"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"role": "assistant",
|
|
27
|
+
"content": "I don't see a file named `client.ts` in the current directory structure you provided. The available files are:\n\n- `README.md`\n- `package-lock.json`\n- `package.json`\n- `tsconfig.json`\n- `vitest.config.ts`\n- `src/` (a directory)\n\nSince there's no `client.ts` file listed, it might either:\n1. Be located inside the `src/` directory (which is possible)\n2. Not exist in the current project structure\n\nTo check if `client.ts` exists in the `src` directory, I can search for it. Let me do that."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"role": "user",
|
|
31
|
+
"content": "its in the src directory"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"role": "assistant",
|
|
35
|
+
"content": "I see you mentioned the code is in the `src` directory. Could you please clarify what specific question or task you'd like help with regarding the code in that directory? For example:\n\n- Are you looking for help with a specific file or feature?\n- Do you need to understand how a particular component works?\n- Are you trying to fix a bug or add a new feature?\n- Do you need help with code structure or architecture?\n\nLet me know what you'd like to accomplish, and I'll help you with the appropriate steps."
|
|
12
36
|
}
|
|
13
37
|
],
|
|
14
38
|
"metadata": {
|
|
@@ -18,7 +42,7 @@
|
|
|
18
42
|
"toolsUsed": [],
|
|
19
43
|
"successfulToolCalls": 0,
|
|
20
44
|
"failedToolCalls": 0,
|
|
21
|
-
"apiTime":
|
|
45
|
+
"apiTime": 18329,
|
|
22
46
|
"toolTime": 0
|
|
23
47
|
}
|
|
24
48
|
}
|
|
@@ -6,7 +6,7 @@ export declare const DEFAULT_MODEL = "Qwen/Qwen3-8B";
|
|
|
6
6
|
export declare const DEFAULT_EMBEDDING_MODEL = "Qwen/Qwen3-Embedding-0.6B";
|
|
7
7
|
export declare const DEFAULT_RERANK_MODEL = "Qwen/Qwen3-Reranker-0.6B";
|
|
8
8
|
export declare const CLI_NAME = "bluehawks";
|
|
9
|
-
export declare const CLI_VERSION = "1.0.
|
|
9
|
+
export declare const CLI_VERSION = "1.0.14";
|
|
10
10
|
export declare const CLI_DESCRIPTION = "A production-ready multi-agent AI CLI assistant";
|
|
11
11
|
export declare const CONFIG_DIR_NAME = ".bluehawks";
|
|
12
12
|
export declare const SETTINGS_FILE = "settings.json";
|
package/dist/config/constants.js
CHANGED
|
@@ -8,7 +8,7 @@ export const DEFAULT_EMBEDDING_MODEL = 'Qwen/Qwen3-Embedding-0.6B';
|
|
|
8
8
|
export const DEFAULT_RERANK_MODEL = 'Qwen/Qwen3-Reranker-0.6B';
|
|
9
9
|
// CLI Metadata
|
|
10
10
|
export const CLI_NAME = 'bluehawks';
|
|
11
|
-
export const CLI_VERSION = '1.0.
|
|
11
|
+
export const CLI_VERSION = '1.0.14';
|
|
12
12
|
export const CLI_DESCRIPTION = 'A production-ready multi-agent AI CLI assistant';
|
|
13
13
|
// Configuration Paths
|
|
14
14
|
export const CONFIG_DIR_NAME = '.bluehawks';
|
|
@@ -30,7 +30,10 @@ export declare class Agent {
|
|
|
30
30
|
protected messages: Message[];
|
|
31
31
|
protected sessionId: string;
|
|
32
32
|
constructor(options: AgentOptions, apiClient: APIClient, toolExecutor: ToolExecutor);
|
|
33
|
-
run(userMessage: string, onChunk?: (content: string) => void, onToolStart?: (name: string, args?: Record<string, unknown>) => void, onToolEnd?: (name: string, result: string) => void
|
|
33
|
+
run(userMessage: string, onChunk?: (content: string) => void, onToolStart?: (name: string, args?: Record<string, unknown>) => void, onToolEnd?: (name: string, result: string) => void, history?: Array<{
|
|
34
|
+
role: string;
|
|
35
|
+
content: string;
|
|
36
|
+
}>): Promise<AgentResponse>;
|
|
34
37
|
getMessages(): Message[];
|
|
35
38
|
getName(): string;
|
|
36
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/core/agents/agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAc,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAI3E,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,KAAK;IACd,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC;IAClC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC9B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY;IAmB7E,GAAG,CACL,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACnC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EACpE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/core/agents/agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAc,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAI3E,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,KAAK;IACd,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC;IAClC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC9B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY;IAmB7E,GAAG,CACL,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACnC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EACpE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,EAClD,OAAO,GAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAM,GACvD,OAAO,CAAC,aAAa,CAAC;IAmKzB,WAAW,IAAI,OAAO,EAAE;IAIxB,OAAO,IAAI,MAAM;CAGpB"}
|
|
@@ -31,10 +31,11 @@ export class Agent {
|
|
|
31
31
|
this.tools = toolRegistry.getDefinitions();
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
async run(userMessage, onChunk, onToolStart, onToolEnd) {
|
|
35
|
-
// Initialize with system message
|
|
34
|
+
async run(userMessage, onChunk, onToolStart, onToolEnd, history = []) {
|
|
35
|
+
// Initialize with system message, prior history, and current user message
|
|
36
36
|
this.messages = [
|
|
37
37
|
{ role: 'system', content: this.systemPrompt },
|
|
38
|
+
...history.map(m => ({ role: m.role, content: m.content })),
|
|
38
39
|
{ role: 'user', content: userMessage },
|
|
39
40
|
];
|
|
40
41
|
const toolsUsed = [];
|
|
@@ -61,21 +62,29 @@ export class Agent {
|
|
|
61
62
|
assistantMessage.tool_calls = message.tool_calls;
|
|
62
63
|
}
|
|
63
64
|
this.messages.push(assistantMessage);
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (onChunk
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
65
|
+
// Stream content if available in this turn
|
|
66
|
+
let turnContent = typeof message.content === 'string' ? message.content : '';
|
|
67
|
+
turnContent = turnContent.replace(/<think>[\s\S]*?<\/think>/g, '').trim();
|
|
68
|
+
if (turnContent) {
|
|
69
|
+
if (finalContent)
|
|
70
|
+
finalContent += '\n\n';
|
|
71
|
+
finalContent += turnContent;
|
|
72
|
+
if (onChunk) {
|
|
73
|
+
const isFinalTurn = !message.tool_calls || message.tool_calls.length === 0;
|
|
74
|
+
if (isFinalTurn) {
|
|
75
|
+
const words = turnContent.split(' ');
|
|
76
|
+
for (const word of words) {
|
|
77
|
+
onChunk(word + ' ');
|
|
78
|
+
await new Promise(r => setTimeout(r, 20));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
onChunk(turnContent + '\n\n');
|
|
77
83
|
}
|
|
78
84
|
}
|
|
85
|
+
}
|
|
86
|
+
// If no tool calls, we're done
|
|
87
|
+
if (!message.tool_calls || message.tool_calls.length === 0) {
|
|
79
88
|
break;
|
|
80
89
|
}
|
|
81
90
|
// Execute tool calls
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/core/agents/agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAoBjD,MAAM,OAAO,KAAK;IACJ,IAAI,CAAS;IACb,YAAY,CAAS;IACrB,KAAK,CAAmB;IACxB,aAAa,CAAS;IACtB,SAAS,CAAY;IACrB,YAAY,CAAe;IAC3B,QAAQ,CAAY;IACpB,SAAS,CAAS;IAE5B,YAAY,OAAqB,EAAE,SAAoB,EAAE,YAA0B;QAC/E,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAEzC,uBAAuB;QACvB,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;iBACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;iBACjD,MAAM,CAAC,CAAC,GAAG,EAAyB,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,cAAc,EAAE,CAAC;QAC/C,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CACL,WAAmB,EACnB,OAAmC,EACnC,WAAoE,EACpE,SAAkD;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/core/agents/agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAoBjD,MAAM,OAAO,KAAK;IACJ,IAAI,CAAS;IACb,YAAY,CAAS;IACrB,KAAK,CAAmB;IACxB,aAAa,CAAS;IACtB,SAAS,CAAY;IACrB,YAAY,CAAe;IAC3B,QAAQ,CAAY;IACpB,SAAS,CAAS;IAE5B,YAAY,OAAqB,EAAE,SAAoB,EAAE,YAA0B;QAC/E,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAEzC,uBAAuB;QACvB,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;iBACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;iBACjD,MAAM,CAAC,CAAC,GAAG,EAAyB,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,cAAc,EAAE,CAAC;QAC/C,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CACL,WAAmB,EACnB,OAAmC,EACnC,WAAoE,EACpE,SAAkD,EAClD,UAAoD,EAAE;QAEtD,0EAA0E;QAC1E,IAAI,CAAC,QAAQ,GAAG;YACZ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE;YAC9C,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAgD,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACvG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;SACzC,CAAC;QAEF,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,OAAO,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,UAAU,EAAE,CAAC;YAEb,6FAA6F;YAC7F,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CACtD,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,KAAK,EACV,MAAM,CACT,CAAC;YACF,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;YAEjC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAE/B,wBAAwB;YACxB,MAAM,gBAAgB,GAAY;gBAC9B,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;aACjC,CAAC;YACF,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,gBAAgB,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YACrD,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAErC,2CAA2C;YAC3C,IAAI,WAAW,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAE1E,IAAI,WAAW,EAAE,CAAC;gBACd,IAAI,YAAY;oBAAE,YAAY,IAAI,MAAM,CAAC;gBACzC,YAAY,IAAI,WAAW,CAAC;gBAE5B,IAAI,OAAO,EAAE,CAAC;oBACV,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;oBAC3E,IAAI,WAAW,EAAE,CAAC;wBACd,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;4BACvB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;4BACpB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;wBAC9C,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC;oBAClC,CAAC;gBACL,CAAC;YACL,CAAC;YAED,+BAA+B;YAC/B,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM;YACV,CAAC;YAED,qBAAqB;YACrB,MAAM,WAAW,GAAiB,EAAE,CAAC;YACrC,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;gBAClE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAEzB,2BAA2B;gBAC3B,MAAM,WAAW,GAAG;oBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE;oBAC1B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY;oBAClC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACtC,CAAC;gBAEF,MAAM,YAAY,GAAoB;oBAClC,GAAG,WAAW;oBACd,QAAQ;oBACR,SAAS;iBACZ,CAAC;gBAEF,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBAE1E,qCAAqC;gBACrC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,OAAO,EAAE,CAAC;oBACV,WAAW,CAAC,IAAI,CAAC;wBACb,YAAY,EAAE,QAAQ,CAAC,EAAE;wBACzB,OAAO,EAAE,yBAAyB,OAAO,CAAC,WAAW,IAAI,oBAAoB,EAAE;qBAClF,CAAC,CAAC;oBACH,SAAS;gBACb,CAAC;gBAED,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAE7B,IAAI,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;oBACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;oBACxC,QAAQ,IAAI,QAAQ,CAAC;oBACrB,mBAAmB,EAAE,CAAC;oBACtB,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAEzB,4BAA4B;oBAC5B,MAAM,aAAa,GAAqB;wBACpC,GAAG,WAAW;wBACd,QAAQ;wBACR,SAAS;wBACT,UAAU,EAAE,MAAM,CAAC,OAAO;wBAC1B,QAAQ;qBACX,CAAC;oBACF,MAAM,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;oBAEzD,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,mCAAmC;oBACnC,MAAM,gBAAgB,GAA4B;wBAC9C,GAAG,WAAW;wBACd,QAAQ;wBACR,SAAS;wBACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;qBAChE,CAAC;oBACF,MAAM,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;oBAEnE,WAAW,CAAC,IAAI,CAAC;wBACb,YAAY,EAAE,QAAQ,CAAC,EAAE;wBACzB,OAAO,EAAE,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;qBAC9E,CAAC,CAAC;oBACH,eAAe,EAAE,CAAC;oBAClB,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnC,CAAC;YACL,CAAC;YAGD,+BAA+B;YAC/B,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;gBAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,MAAM;oBACZ,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,OAAO,EAAE,MAAM,CAAC,OAAO;iBAC1B,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,OAAO;YACH,OAAO,EAAE,YAAY;YACrB,SAAS;YACT,UAAU;YACV,OAAO;YACP,QAAQ;YACR,mBAAmB;YACnB,eAAe;SAClB,CAAC;IACN,CAAC;IAED,WAAW;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/core/agents/orchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAS,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAMvD,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/core/agents/orchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAS,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAMvD,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B;AA4BD,qBAAa,YAAY;IACrB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,mBAAmB,CAAgD;gBAG/D,OAAO,EAAE,mBAAmB;IAcxC,OAAO,CAAC,wBAAwB;IAmC1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAOnB,eAAe;YASf,iBAAiB;IAa/B,OAAO,CAAC,iBAAiB;IA8BnB,IAAI,CACN,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAM,EACvD,SAAS,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QACpC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QACrC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;KACtD,GACF,OAAO,CAAC,aAAa,CAAC;IA2CnB,WAAW,CACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QACpC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QACrC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;KACtD,GACF,OAAO,CAAC,aAAa,CAAC;IAoBzB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAInC,UAAU,IAAI,OAAO;IAIrB,YAAY,IAAI,cAAc,EAAE;IAIhC,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;CAGjD"}
|
|
@@ -16,18 +16,22 @@ You have access to various tools for:
|
|
|
16
16
|
- Git operations (status, diff, commit, etc.)
|
|
17
17
|
- Fetching web content
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
## Tool Call Format
|
|
20
|
+
When you want to call a tool, you MUST use the following JSON format wrapped in <tool_call> tags:
|
|
21
|
+
<tool_call> {"name": "tool_name", "arguments": {"arg1": "value1", ...}} </tool_call>
|
|
22
|
+
|
|
23
|
+
## Guidelines
|
|
24
|
+
1. **Be Autonomic**: Do NOT ask for permission before calling a tool. Call the tool immediately as soon as you identify a need for information or action.
|
|
25
|
+
2. **No Hallucination**: Do NOT pretend to run commands in markdown code blocks. You must use the <tool_call> format for actual execution.
|
|
26
|
+
3. **Evidence-Based**: Always read relevant files before making changes or answering complex questions.
|
|
27
|
+
4. **Minimalistic**: Make targeted, minimal changes to the codebase.
|
|
28
|
+
5. **Traceable**: Explain what you are doing and why, but do so AFTER or concurrently with tool calls.
|
|
25
29
|
|
|
26
30
|
When the user asks a question:
|
|
27
|
-
1. First, understand what they're asking
|
|
28
|
-
2. Use tools to gather necessary information
|
|
29
|
-
3. Provide a clear, helpful response
|
|
30
|
-
4. If making changes, explain what you changed and why
|
|
31
|
+
1. First, understand what they're asking.
|
|
32
|
+
2. Use tools to gather ALL necessary information.
|
|
33
|
+
3. Provide a clear, helpful response based ONLY on the evidence gathered.
|
|
34
|
+
4. If making changes, explain what you changed and why.`;
|
|
31
35
|
export class Orchestrator {
|
|
32
36
|
apiClient;
|
|
33
37
|
toolExecutor;
|
|
@@ -39,6 +43,7 @@ export class Orchestrator {
|
|
|
39
43
|
contextContent = '';
|
|
40
44
|
rootStructure = '';
|
|
41
45
|
subAgents = new Map();
|
|
46
|
+
conversationHistory = [];
|
|
42
47
|
constructor(options) {
|
|
43
48
|
this.apiClient = options.apiClient;
|
|
44
49
|
this.toolExecutor = options.toolExecutor;
|
|
@@ -135,6 +140,8 @@ Before making any changes, first:
|
|
|
135
140
|
return prompt;
|
|
136
141
|
}
|
|
137
142
|
async chat(userMessage, _history = [], callbacks) {
|
|
143
|
+
// Add user message to conversation history
|
|
144
|
+
this.conversationHistory.push({ role: 'user', content: userMessage });
|
|
138
145
|
// Retrieve relevant memories
|
|
139
146
|
const memories = await memoryManager.search(userMessage, 5);
|
|
140
147
|
let systemPrompt = this.buildSystemPrompt();
|
|
@@ -149,7 +156,14 @@ Before making any changes, first:
|
|
|
149
156
|
systemPrompt,
|
|
150
157
|
maxIterations: this.maxTurns,
|
|
151
158
|
}, this.apiClient, this.toolExecutor);
|
|
152
|
-
|
|
159
|
+
// Pass conversation history (excluding current message which will be added by agent)
|
|
160
|
+
const priorHistory = this.conversationHistory.slice(0, -1);
|
|
161
|
+
const response = await mainAgent.run(userMessage, callbacks?.onChunk, callbacks?.onToolStart, callbacks?.onToolEnd, priorHistory);
|
|
162
|
+
// Add assistant response to history
|
|
163
|
+
if (response.content) {
|
|
164
|
+
this.conversationHistory.push({ role: 'assistant', content: response.content });
|
|
165
|
+
}
|
|
166
|
+
return response;
|
|
153
167
|
}
|
|
154
168
|
async runSubAgent(agentName, task, callbacks) {
|
|
155
169
|
const config = this.subAgents.get(agentName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/core/agents/orchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,KAAK,EAAsB,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC,CAAC,iBAAiB;AAmBrE,MAAM,qBAAqB,GAAG
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/core/agents/orchestrator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/config/constants.ts
CHANGED
|
@@ -10,7 +10,7 @@ export const DEFAULT_RERANK_MODEL = 'Qwen/Qwen3-Reranker-0.6B';
|
|
|
10
10
|
|
|
11
11
|
// CLI Metadata
|
|
12
12
|
export const CLI_NAME = 'bluehawks';
|
|
13
|
-
export const CLI_VERSION = '1.0.
|
|
13
|
+
export const CLI_VERSION = '1.0.14';
|
|
14
14
|
export const CLI_DESCRIPTION = 'A production-ready multi-agent AI CLI assistant';
|
|
15
15
|
|
|
16
16
|
// Configuration Paths
|
package/src/core/agents/agent.ts
CHANGED
|
@@ -60,11 +60,13 @@ export class Agent {
|
|
|
60
60
|
userMessage: string,
|
|
61
61
|
onChunk?: (content: string) => void,
|
|
62
62
|
onToolStart?: (name: string, args?: Record<string, unknown>) => void,
|
|
63
|
-
onToolEnd?: (name: string, result: string) => void
|
|
63
|
+
onToolEnd?: (name: string, result: string) => void,
|
|
64
|
+
history: Array<{ role: string; content: string }> = []
|
|
64
65
|
): Promise<AgentResponse> {
|
|
65
|
-
// Initialize with system message
|
|
66
|
+
// Initialize with system message, prior history, and current user message
|
|
66
67
|
this.messages = [
|
|
67
68
|
{ role: 'system', content: this.systemPrompt },
|
|
69
|
+
...history.map(m => ({ role: m.role as 'user' | 'assistant' | 'system' | 'tool', content: m.content })),
|
|
68
70
|
{ role: 'user', content: userMessage },
|
|
69
71
|
];
|
|
70
72
|
|
|
@@ -101,23 +103,30 @@ export class Agent {
|
|
|
101
103
|
}
|
|
102
104
|
this.messages.push(assistantMessage);
|
|
103
105
|
|
|
104
|
-
//
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
106
|
+
// Stream content if available in this turn
|
|
107
|
+
let turnContent = typeof message.content === 'string' ? message.content : '';
|
|
108
|
+
turnContent = turnContent.replace(/<think>[\s\S]*?<\/think>/g, '').trim();
|
|
109
|
+
|
|
110
|
+
if (turnContent) {
|
|
111
|
+
if (finalContent) finalContent += '\n\n';
|
|
112
|
+
finalContent += turnContent;
|
|
113
|
+
|
|
114
|
+
if (onChunk) {
|
|
115
|
+
const isFinalTurn = !message.tool_calls || message.tool_calls.length === 0;
|
|
116
|
+
if (isFinalTurn) {
|
|
117
|
+
const words = turnContent.split(' ');
|
|
118
|
+
for (const word of words) {
|
|
119
|
+
onChunk(word + ' ');
|
|
120
|
+
await new Promise(r => setTimeout(r, 20));
|
|
121
|
+
}
|
|
122
|
+
} else {
|
|
123
|
+
onChunk(turnContent + '\n\n');
|
|
119
124
|
}
|
|
120
125
|
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// If no tool calls, we're done
|
|
129
|
+
if (!message.tool_calls || message.tool_calls.length === 0) {
|
|
121
130
|
break;
|
|
122
131
|
}
|
|
123
132
|
|
|
@@ -37,18 +37,22 @@ You have access to various tools for:
|
|
|
37
37
|
- Git operations (status, diff, commit, etc.)
|
|
38
38
|
- Fetching web content
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
## Tool Call Format
|
|
41
|
+
When you want to call a tool, you MUST use the following JSON format wrapped in <tool_call> tags:
|
|
42
|
+
<tool_call> {"name": "tool_name", "arguments": {"arg1": "value1", ...}} </tool_call>
|
|
43
|
+
|
|
44
|
+
## Guidelines
|
|
45
|
+
1. **Be Autonomic**: Do NOT ask for permission before calling a tool. Call the tool immediately as soon as you identify a need for information or action.
|
|
46
|
+
2. **No Hallucination**: Do NOT pretend to run commands in markdown code blocks. You must use the <tool_call> format for actual execution.
|
|
47
|
+
3. **Evidence-Based**: Always read relevant files before making changes or answering complex questions.
|
|
48
|
+
4. **Minimalistic**: Make targeted, minimal changes to the codebase.
|
|
49
|
+
5. **Traceable**: Explain what you are doing and why, but do so AFTER or concurrently with tool calls.
|
|
46
50
|
|
|
47
51
|
When the user asks a question:
|
|
48
|
-
1. First, understand what they're asking
|
|
49
|
-
2. Use tools to gather necessary information
|
|
50
|
-
3. Provide a clear, helpful response
|
|
51
|
-
4. If making changes, explain what you changed and why
|
|
52
|
+
1. First, understand what they're asking.
|
|
53
|
+
2. Use tools to gather ALL necessary information.
|
|
54
|
+
3. Provide a clear, helpful response based ONLY on the evidence gathered.
|
|
55
|
+
4. If making changes, explain what you changed and why.`;
|
|
52
56
|
|
|
53
57
|
export class Orchestrator {
|
|
54
58
|
private apiClient: APIClient;
|
|
@@ -61,6 +65,8 @@ export class Orchestrator {
|
|
|
61
65
|
private contextContent: string = '';
|
|
62
66
|
private rootStructure: string = '';
|
|
63
67
|
private subAgents: Map<string, SubAgentConfig> = new Map();
|
|
68
|
+
private conversationHistory: Array<{ role: string; content: string }> = [];
|
|
69
|
+
|
|
64
70
|
|
|
65
71
|
constructor(options: OrchestratorOptions) {
|
|
66
72
|
this.apiClient = options.apiClient;
|
|
@@ -179,6 +185,9 @@ Before making any changes, first:
|
|
|
179
185
|
onToolEnd?: (name: string, result: string) => void;
|
|
180
186
|
}
|
|
181
187
|
): Promise<AgentResponse> {
|
|
188
|
+
// Add user message to conversation history
|
|
189
|
+
this.conversationHistory.push({ role: 'user', content: userMessage });
|
|
190
|
+
|
|
182
191
|
// Retrieve relevant memories
|
|
183
192
|
const memories = await memoryManager.search(userMessage, 5);
|
|
184
193
|
let systemPrompt = this.buildSystemPrompt();
|
|
@@ -200,12 +209,22 @@ Before making any changes, first:
|
|
|
200
209
|
this.toolExecutor
|
|
201
210
|
);
|
|
202
211
|
|
|
203
|
-
|
|
212
|
+
// Pass conversation history (excluding current message which will be added by agent)
|
|
213
|
+
const priorHistory = this.conversationHistory.slice(0, -1);
|
|
214
|
+
const response = await mainAgent.run(
|
|
204
215
|
userMessage,
|
|
205
216
|
callbacks?.onChunk,
|
|
206
217
|
callbacks?.onToolStart,
|
|
207
|
-
callbacks?.onToolEnd
|
|
218
|
+
callbacks?.onToolEnd,
|
|
219
|
+
priorHistory
|
|
208
220
|
);
|
|
221
|
+
|
|
222
|
+
// Add assistant response to history
|
|
223
|
+
if (response.content) {
|
|
224
|
+
this.conversationHistory.push({ role: 'assistant', content: response.content });
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return response;
|
|
209
228
|
}
|
|
210
229
|
|
|
211
230
|
async runSubAgent(
|