@bluehawks/cli 1.0.0
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/.eslintrc.json +36 -0
- package/.prettierrc +8 -0
- package/README.md +288 -0
- package/dist/cli/app.d.ts +12 -0
- package/dist/cli/app.d.ts.map +1 -0
- package/dist/cli/app.js +201 -0
- package/dist/cli/app.js.map +1 -0
- package/dist/cli/commands/index.d.ts +56 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +201 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/config/constants.d.ts +32 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +39 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +4 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +56 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +28 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/settings.d.ts +20 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +102 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/core/agents/agent.d.ts +33 -0
- package/dist/core/agents/agent.d.ts.map +1 -0
- package/dist/core/agents/agent.js +156 -0
- package/dist/core/agents/agent.js.map +1 -0
- package/dist/core/agents/index.d.ts +3 -0
- package/dist/core/agents/index.d.ts.map +1 -0
- package/dist/core/agents/index.js +3 -0
- package/dist/core/agents/index.js.map +1 -0
- package/dist/core/agents/orchestrator.d.ts +56 -0
- package/dist/core/agents/orchestrator.d.ts.map +1 -0
- package/dist/core/agents/orchestrator.js +151 -0
- package/dist/core/agents/orchestrator.js.map +1 -0
- package/dist/core/api/client.d.ts +46 -0
- package/dist/core/api/client.d.ts.map +1 -0
- package/dist/core/api/client.js +223 -0
- package/dist/core/api/client.js.map +1 -0
- package/dist/core/api/index.d.ts +3 -0
- package/dist/core/api/index.d.ts.map +1 -0
- package/dist/core/api/index.js +3 -0
- package/dist/core/api/index.js.map +1 -0
- package/dist/core/api/types.d.ts +126 -0
- package/dist/core/api/types.d.ts.map +1 -0
- package/dist/core/api/types.js +16 -0
- package/dist/core/api/types.js.map +1 -0
- package/dist/core/hooks/index.d.ts +3 -0
- package/dist/core/hooks/index.d.ts.map +1 -0
- package/dist/core/hooks/index.js +3 -0
- package/dist/core/hooks/index.js.map +1 -0
- package/dist/core/hooks/manager.d.ts +43 -0
- package/dist/core/hooks/manager.d.ts.map +1 -0
- package/dist/core/hooks/manager.js +178 -0
- package/dist/core/hooks/manager.js.map +1 -0
- package/dist/core/hooks/types.d.ts +68 -0
- package/dist/core/hooks/types.d.ts.map +1 -0
- package/dist/core/hooks/types.js +6 -0
- package/dist/core/hooks/types.js.map +1 -0
- package/dist/core/mcp/client.d.ts +48 -0
- package/dist/core/mcp/client.d.ts.map +1 -0
- package/dist/core/mcp/client.js +139 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/index.d.ts +3 -0
- package/dist/core/mcp/index.d.ts.map +1 -0
- package/dist/core/mcp/index.js +3 -0
- package/dist/core/mcp/index.js.map +1 -0
- package/dist/core/mcp/manager.d.ts +46 -0
- package/dist/core/mcp/manager.d.ts.map +1 -0
- package/dist/core/mcp/manager.js +133 -0
- package/dist/core/mcp/manager.js.map +1 -0
- package/dist/core/plugins/index.d.ts +3 -0
- package/dist/core/plugins/index.d.ts.map +1 -0
- package/dist/core/plugins/index.js +3 -0
- package/dist/core/plugins/index.js.map +1 -0
- package/dist/core/plugins/loader.d.ts +63 -0
- package/dist/core/plugins/loader.d.ts.map +1 -0
- package/dist/core/plugins/loader.js +258 -0
- package/dist/core/plugins/loader.js.map +1 -0
- package/dist/core/plugins/types.d.ts +95 -0
- package/dist/core/plugins/types.d.ts.map +1 -0
- package/dist/core/plugins/types.js +6 -0
- package/dist/core/plugins/types.js.map +1 -0
- package/dist/core/session/index.d.ts +3 -0
- package/dist/core/session/index.d.ts.map +1 -0
- package/dist/core/session/index.js +3 -0
- package/dist/core/session/index.js.map +1 -0
- package/dist/core/session/manager.d.ts +57 -0
- package/dist/core/session/manager.d.ts.map +1 -0
- package/dist/core/session/manager.js +182 -0
- package/dist/core/session/manager.js.map +1 -0
- package/dist/core/session/storage.d.ts +42 -0
- package/dist/core/session/storage.d.ts.map +1 -0
- package/dist/core/session/storage.js +138 -0
- package/dist/core/session/storage.js.map +1 -0
- package/dist/core/tools/definitions/file.d.ts +6 -0
- package/dist/core/tools/definitions/file.d.ts.map +1 -0
- package/dist/core/tools/definitions/file.js +276 -0
- package/dist/core/tools/definitions/file.js.map +1 -0
- package/dist/core/tools/definitions/git.d.ts +6 -0
- package/dist/core/tools/definitions/git.d.ts.map +1 -0
- package/dist/core/tools/definitions/git.js +294 -0
- package/dist/core/tools/definitions/git.js.map +1 -0
- package/dist/core/tools/definitions/index.d.ts +11 -0
- package/dist/core/tools/definitions/index.d.ts.map +1 -0
- package/dist/core/tools/definitions/index.js +22 -0
- package/dist/core/tools/definitions/index.js.map +1 -0
- package/dist/core/tools/definitions/search.d.ts +6 -0
- package/dist/core/tools/definitions/search.d.ts.map +1 -0
- package/dist/core/tools/definitions/search.js +223 -0
- package/dist/core/tools/definitions/search.js.map +1 -0
- package/dist/core/tools/definitions/shell.d.ts +6 -0
- package/dist/core/tools/definitions/shell.d.ts.map +1 -0
- package/dist/core/tools/definitions/shell.js +190 -0
- package/dist/core/tools/definitions/shell.js.map +1 -0
- package/dist/core/tools/definitions/web.d.ts +6 -0
- package/dist/core/tools/definitions/web.d.ts.map +1 -0
- package/dist/core/tools/definitions/web.js +104 -0
- package/dist/core/tools/definitions/web.js.map +1 -0
- package/dist/core/tools/executor.d.ts +24 -0
- package/dist/core/tools/executor.d.ts.map +1 -0
- package/dist/core/tools/executor.js +111 -0
- package/dist/core/tools/executor.js.map +1 -0
- package/dist/core/tools/index.d.ts +4 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +4 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/registry.d.ts +23 -0
- package/dist/core/tools/registry.d.ts.map +1 -0
- package/dist/core/tools/registry.js +28 -0
- package/dist/core/tools/registry.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +352 -0
- package/dist/index.js.map +1 -0
- package/package.json +62 -0
- package/src/cli/app.tsx +319 -0
- package/src/cli/commands/index.ts +261 -0
- package/src/config/constants.ts +45 -0
- package/src/config/index.ts +3 -0
- package/src/config/schema.ts +36 -0
- package/src/config/settings.ts +121 -0
- package/src/core/agents/agent.ts +205 -0
- package/src/core/agents/index.ts +2 -0
- package/src/core/agents/orchestrator.ts +223 -0
- package/src/core/api/client.ts +300 -0
- package/src/core/api/index.ts +2 -0
- package/src/core/api/types.ts +149 -0
- package/src/core/hooks/index.ts +2 -0
- package/src/core/hooks/manager.ts +212 -0
- package/src/core/hooks/types.ts +116 -0
- package/src/core/mcp/client.ts +198 -0
- package/src/core/mcp/index.ts +2 -0
- package/src/core/mcp/manager.ts +153 -0
- package/src/core/plugins/index.ts +2 -0
- package/src/core/plugins/loader.ts +312 -0
- package/src/core/plugins/types.ts +111 -0
- package/src/core/session/index.ts +2 -0
- package/src/core/session/manager.ts +246 -0
- package/src/core/session/storage.ts +184 -0
- package/src/core/tools/definitions/file.ts +312 -0
- package/src/core/tools/definitions/git.ts +326 -0
- package/src/core/tools/definitions/index.ts +24 -0
- package/src/core/tools/definitions/search.ts +266 -0
- package/src/core/tools/definitions/shell.ts +228 -0
- package/src/core/tools/definitions/web.ts +113 -0
- package/src/core/tools/executor.ts +145 -0
- package/src/core/tools/index.ts +3 -0
- package/src/core/tools/registry.ts +44 -0
- package/src/index.ts +407 -0
- package/tsconfig.json +40 -0
- package/vitest.config.ts +13 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bluehawks CLI - Base Agent
|
|
3
|
+
* Base class for all agents
|
|
4
|
+
*/
|
|
5
|
+
import { toolRegistry } from '../tools/registry.js';
|
|
6
|
+
import { hooksManager } from '../hooks/index.js';
|
|
7
|
+
export class Agent {
|
|
8
|
+
name;
|
|
9
|
+
systemPrompt;
|
|
10
|
+
tools;
|
|
11
|
+
maxIterations;
|
|
12
|
+
apiClient;
|
|
13
|
+
toolExecutor;
|
|
14
|
+
messages;
|
|
15
|
+
sessionId;
|
|
16
|
+
constructor(options, apiClient, toolExecutor) {
|
|
17
|
+
this.name = options.name;
|
|
18
|
+
this.systemPrompt = options.systemPrompt;
|
|
19
|
+
this.maxIterations = options.maxIterations || 10;
|
|
20
|
+
this.apiClient = apiClient;
|
|
21
|
+
this.toolExecutor = toolExecutor;
|
|
22
|
+
this.messages = [];
|
|
23
|
+
this.sessionId = `session_${Date.now()}`;
|
|
24
|
+
// Get tool definitions
|
|
25
|
+
if (options.tools && options.tools.length > 0) {
|
|
26
|
+
this.tools = options.tools
|
|
27
|
+
.map((name) => toolRegistry.get(name)?.definition)
|
|
28
|
+
.filter((def) => def !== undefined);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
this.tools = toolRegistry.getDefinitions();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async run(userMessage, onChunk, onToolStart, onToolEnd) {
|
|
35
|
+
// Initialize with system message
|
|
36
|
+
this.messages = [
|
|
37
|
+
{ role: 'system', content: this.systemPrompt },
|
|
38
|
+
{ role: 'user', content: userMessage },
|
|
39
|
+
];
|
|
40
|
+
const toolsUsed = [];
|
|
41
|
+
let iterations = 0;
|
|
42
|
+
let finalContent = '';
|
|
43
|
+
while (iterations < this.maxIterations) {
|
|
44
|
+
iterations++;
|
|
45
|
+
// Use non-streaming with tools for agent loop (vLLM doesn't support streaming + tool_choice)
|
|
46
|
+
const response = await this.apiClient.createChatCompletion(this.messages, this.tools, 'auto');
|
|
47
|
+
const choice = response.choices[0];
|
|
48
|
+
const message = choice.message;
|
|
49
|
+
// Add assistant message
|
|
50
|
+
const assistantMessage = {
|
|
51
|
+
role: 'assistant',
|
|
52
|
+
content: message.content || '',
|
|
53
|
+
};
|
|
54
|
+
if (message.tool_calls && message.tool_calls.length > 0) {
|
|
55
|
+
assistantMessage.tool_calls = message.tool_calls;
|
|
56
|
+
}
|
|
57
|
+
this.messages.push(assistantMessage);
|
|
58
|
+
// If no tool calls, we're done - output the response
|
|
59
|
+
if (!message.tool_calls || message.tool_calls.length === 0) {
|
|
60
|
+
const content = typeof message.content === 'string' ? message.content : '';
|
|
61
|
+
finalContent = content;
|
|
62
|
+
// Simulate streaming by outputting content progressively
|
|
63
|
+
if (onChunk && finalContent) {
|
|
64
|
+
// Output in small chunks for streaming effect
|
|
65
|
+
const words = finalContent.split(' ');
|
|
66
|
+
for (const word of words) {
|
|
67
|
+
onChunk(word + ' ');
|
|
68
|
+
await new Promise(r => setTimeout(r, 20)); // Small delay for streaming effect
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
// Execute tool calls
|
|
74
|
+
const toolResults = [];
|
|
75
|
+
for (const toolCall of message.tool_calls) {
|
|
76
|
+
const toolName = toolCall.function.name;
|
|
77
|
+
const toolInput = JSON.parse(toolCall.function.arguments || '{}');
|
|
78
|
+
toolsUsed.push(toolName);
|
|
79
|
+
// Execute PreToolUse hooks
|
|
80
|
+
const hookContext = {
|
|
81
|
+
sessionId: this.sessionId,
|
|
82
|
+
projectPath: process.cwd(),
|
|
83
|
+
model: this.apiClient.currentModel,
|
|
84
|
+
timestamp: new Date().toISOString(),
|
|
85
|
+
};
|
|
86
|
+
const preHookInput = {
|
|
87
|
+
...hookContext,
|
|
88
|
+
toolName,
|
|
89
|
+
toolInput,
|
|
90
|
+
};
|
|
91
|
+
const preResults = await hooksManager.execute('PreToolUse', preHookInput);
|
|
92
|
+
// Check if any hook blocked the tool
|
|
93
|
+
const blocked = preResults.find(r => r.block);
|
|
94
|
+
if (blocked) {
|
|
95
|
+
toolResults.push({
|
|
96
|
+
tool_call_id: toolCall.id,
|
|
97
|
+
content: `Tool blocked by hook: ${blocked.blockReason || 'No reason provided'}`,
|
|
98
|
+
});
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
onToolStart?.(toolName);
|
|
102
|
+
const startTime = Date.now();
|
|
103
|
+
try {
|
|
104
|
+
const result = await this.toolExecutor.executeToolCall(toolCall);
|
|
105
|
+
const duration = Date.now() - startTime;
|
|
106
|
+
toolResults.push(result);
|
|
107
|
+
// Execute PostToolUse hooks
|
|
108
|
+
const postHookInput = {
|
|
109
|
+
...hookContext,
|
|
110
|
+
toolName,
|
|
111
|
+
toolInput,
|
|
112
|
+
toolOutput: result.content,
|
|
113
|
+
duration,
|
|
114
|
+
};
|
|
115
|
+
await hooksManager.execute('PostToolUse', postHookInput);
|
|
116
|
+
onToolEnd?.(toolName, result.content);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
// Execute PostToolUseFailure hooks
|
|
120
|
+
const failureHookInput = {
|
|
121
|
+
...hookContext,
|
|
122
|
+
toolName,
|
|
123
|
+
toolInput,
|
|
124
|
+
error: error instanceof Error ? error.message : String(error),
|
|
125
|
+
};
|
|
126
|
+
await hooksManager.execute('PostToolUseFailure', failureHookInput);
|
|
127
|
+
toolResults.push({
|
|
128
|
+
tool_call_id: toolCall.id,
|
|
129
|
+
content: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
130
|
+
});
|
|
131
|
+
onToolEnd?.(toolName, 'Error');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Add tool results to messages
|
|
135
|
+
for (const result of toolResults) {
|
|
136
|
+
this.messages.push({
|
|
137
|
+
role: 'tool',
|
|
138
|
+
tool_call_id: result.tool_call_id,
|
|
139
|
+
content: result.content,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
content: finalContent,
|
|
145
|
+
toolsUsed,
|
|
146
|
+
iterations,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
getMessages() {
|
|
150
|
+
return [...this.messages];
|
|
151
|
+
}
|
|
152
|
+
getName() {
|
|
153
|
+
return this.name;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/core/agents/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/agents/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/agents/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bluehawks CLI - Agent Orchestrator
|
|
3
|
+
* Coordinates multiple agents for complex tasks
|
|
4
|
+
*/
|
|
5
|
+
import { APIClient } from '../api/client.js';
|
|
6
|
+
import { ToolExecutor } from '../tools/executor.js';
|
|
7
|
+
import { type AgentResponse } from './agent.js';
|
|
8
|
+
export interface SubAgentConfig {
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
systemPrompt: string;
|
|
12
|
+
tools?: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface OrchestratorOptions {
|
|
15
|
+
projectPath: string;
|
|
16
|
+
apiClient: APIClient;
|
|
17
|
+
toolExecutor: ToolExecutor;
|
|
18
|
+
planMode?: boolean;
|
|
19
|
+
maxTurns?: number;
|
|
20
|
+
systemPrompt?: string;
|
|
21
|
+
appendSystemPrompt?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare class Orchestrator {
|
|
24
|
+
private apiClient;
|
|
25
|
+
private toolExecutor;
|
|
26
|
+
private projectPath;
|
|
27
|
+
private planMode;
|
|
28
|
+
private maxTurns;
|
|
29
|
+
private customSystemPrompt?;
|
|
30
|
+
private appendSystemPrompt?;
|
|
31
|
+
private contextContent;
|
|
32
|
+
private subAgents;
|
|
33
|
+
constructor(options: OrchestratorOptions);
|
|
34
|
+
private registerDefaultSubAgents;
|
|
35
|
+
initialize(): Promise<void>;
|
|
36
|
+
private loadContextFile;
|
|
37
|
+
private buildSystemPrompt;
|
|
38
|
+
chat(userMessage: string, _history?: Array<{
|
|
39
|
+
role: string;
|
|
40
|
+
content: string;
|
|
41
|
+
}>, callbacks?: {
|
|
42
|
+
onChunk?: (content: string) => void;
|
|
43
|
+
onToolStart?: (name: string) => void;
|
|
44
|
+
onToolEnd?: (name: string, result: string) => void;
|
|
45
|
+
}): Promise<AgentResponse>;
|
|
46
|
+
runSubAgent(agentName: string, task: string, callbacks?: {
|
|
47
|
+
onChunk?: (content: string) => void;
|
|
48
|
+
onToolStart?: (name: string) => void;
|
|
49
|
+
onToolEnd?: (name: string, result: string) => void;
|
|
50
|
+
}): Promise<AgentResponse>;
|
|
51
|
+
setPlanMode(enabled: boolean): void;
|
|
52
|
+
isPlanMode(): boolean;
|
|
53
|
+
getSubAgents(): SubAgentConfig[];
|
|
54
|
+
registerSubAgent(config: SubAgentConfig): void;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +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;AAKvD,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;AAwBD,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,SAAS,CAA0C;gBAE/C,OAAO,EAAE,mBAAmB;IAcxC,OAAO,CAAC,wBAAwB;IAmC1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAKnB,eAAe;IAS7B,OAAO,CAAC,iBAAiB;IA0BnB,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;IAoBnB,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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bluehawks CLI - Agent Orchestrator
|
|
3
|
+
* Coordinates multiple agents for complex tasks
|
|
4
|
+
*/
|
|
5
|
+
import { Agent } from './agent.js';
|
|
6
|
+
import { CONTEXT_FILE } from '../../config/constants.js';
|
|
7
|
+
import * as fs from 'node:fs/promises';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
const DEFAULT_SYSTEM_PROMPT = `You are Bluehawks, a powerful AI coding assistant that helps developers understand and modify their codebase.
|
|
10
|
+
|
|
11
|
+
You have access to various tools for:
|
|
12
|
+
- Reading and writing files
|
|
13
|
+
- Executing shell commands
|
|
14
|
+
- Searching code with grep and finding files
|
|
15
|
+
- Git operations (status, diff, commit, etc.)
|
|
16
|
+
- Fetching web content
|
|
17
|
+
|
|
18
|
+
Guidelines:
|
|
19
|
+
1. Always read relevant files before making changes
|
|
20
|
+
2. Make targeted, minimal changes
|
|
21
|
+
3. Test your changes when possible
|
|
22
|
+
4. Be careful with destructive operations
|
|
23
|
+
5. Explain what you're doing and why
|
|
24
|
+
|
|
25
|
+
When the user asks a question:
|
|
26
|
+
1. First, understand what they're asking
|
|
27
|
+
2. Use tools to gather necessary information
|
|
28
|
+
3. Provide a clear, helpful response
|
|
29
|
+
4. If making changes, explain what you changed and why`;
|
|
30
|
+
export class Orchestrator {
|
|
31
|
+
apiClient;
|
|
32
|
+
toolExecutor;
|
|
33
|
+
projectPath;
|
|
34
|
+
planMode;
|
|
35
|
+
maxTurns;
|
|
36
|
+
customSystemPrompt;
|
|
37
|
+
appendSystemPrompt;
|
|
38
|
+
contextContent = '';
|
|
39
|
+
subAgents = new Map();
|
|
40
|
+
constructor(options) {
|
|
41
|
+
this.apiClient = options.apiClient;
|
|
42
|
+
this.toolExecutor = options.toolExecutor;
|
|
43
|
+
this.projectPath = options.projectPath;
|
|
44
|
+
this.planMode = options.planMode || false;
|
|
45
|
+
this.maxTurns = options.maxTurns || 15;
|
|
46
|
+
this.customSystemPrompt = options.systemPrompt;
|
|
47
|
+
this.appendSystemPrompt = options.appendSystemPrompt;
|
|
48
|
+
// Register default sub-agents
|
|
49
|
+
this.registerDefaultSubAgents();
|
|
50
|
+
}
|
|
51
|
+
registerDefaultSubAgents() {
|
|
52
|
+
this.subAgents.set('coder', {
|
|
53
|
+
name: 'coder',
|
|
54
|
+
description: 'Specialized in writing and modifying code',
|
|
55
|
+
systemPrompt: `You are a code-focused agent. Your job is to write clean, efficient code and make targeted modifications to existing code. Focus on:
|
|
56
|
+
- Writing idiomatic code for the project's language
|
|
57
|
+
- Following existing code conventions
|
|
58
|
+
- Making minimal, focused changes
|
|
59
|
+
- Adding appropriate comments when needed`,
|
|
60
|
+
tools: ['read_file', 'write_file', 'edit_file', 'grep_search', 'find_files'],
|
|
61
|
+
});
|
|
62
|
+
this.subAgents.set('researcher', {
|
|
63
|
+
name: 'researcher',
|
|
64
|
+
description: 'Specialized in gathering information and research',
|
|
65
|
+
systemPrompt: `You are a research agent. Your job is to gather information about the codebase and external resources. Focus on:
|
|
66
|
+
- Reading and understanding code structure
|
|
67
|
+
- Finding relevant files and functions
|
|
68
|
+
- Fetching documentation when needed
|
|
69
|
+
- Summarizing findings clearly`,
|
|
70
|
+
tools: ['read_file', 'list_directory', 'grep_search', 'find_files', 'fetch_url'],
|
|
71
|
+
});
|
|
72
|
+
this.subAgents.set('shell', {
|
|
73
|
+
name: 'shell',
|
|
74
|
+
description: 'Specialized in running commands and automation',
|
|
75
|
+
systemPrompt: `You are a shell execution agent. Your job is to run commands safely and interpret their output. Focus on:
|
|
76
|
+
- Running build, test, and utility commands
|
|
77
|
+
- Interpreting command output
|
|
78
|
+
- Suggesting fixes for errors
|
|
79
|
+
- Managing git operations`,
|
|
80
|
+
tools: ['run_command', 'git_status', 'git_diff', 'git_add', 'git_commit'],
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
async initialize() {
|
|
84
|
+
// Load context file if it exists
|
|
85
|
+
await this.loadContextFile();
|
|
86
|
+
}
|
|
87
|
+
async loadContextFile() {
|
|
88
|
+
const contextPath = path.join(this.projectPath, CONTEXT_FILE);
|
|
89
|
+
try {
|
|
90
|
+
this.contextContent = await fs.readFile(contextPath, 'utf-8');
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
this.contextContent = '';
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
buildSystemPrompt() {
|
|
97
|
+
// Use custom system prompt if provided, otherwise default
|
|
98
|
+
let prompt = this.customSystemPrompt || DEFAULT_SYSTEM_PROMPT;
|
|
99
|
+
// Append additional prompt content if provided
|
|
100
|
+
if (this.appendSystemPrompt) {
|
|
101
|
+
prompt += `\n\n${this.appendSystemPrompt}`;
|
|
102
|
+
}
|
|
103
|
+
if (this.contextContent) {
|
|
104
|
+
prompt += `\n\n## Project Context (from ${CONTEXT_FILE})\n\n${this.contextContent}`;
|
|
105
|
+
}
|
|
106
|
+
if (this.planMode) {
|
|
107
|
+
prompt += `\n\n## Plan Mode Active
|
|
108
|
+
Before making any changes, first:
|
|
109
|
+
1. Analyze the request
|
|
110
|
+
2. Create a step-by-step plan
|
|
111
|
+
3. Present the plan to the user
|
|
112
|
+
4. Wait for approval before proceeding
|
|
113
|
+
5. Execute each step, reporting progress`;
|
|
114
|
+
}
|
|
115
|
+
return prompt;
|
|
116
|
+
}
|
|
117
|
+
async chat(userMessage, _history = [], callbacks) {
|
|
118
|
+
const mainAgent = new Agent({
|
|
119
|
+
name: 'main',
|
|
120
|
+
systemPrompt: this.buildSystemPrompt(),
|
|
121
|
+
maxIterations: this.maxTurns,
|
|
122
|
+
}, this.apiClient, this.toolExecutor);
|
|
123
|
+
return mainAgent.run(userMessage, callbacks?.onChunk, callbacks?.onToolStart, callbacks?.onToolEnd);
|
|
124
|
+
}
|
|
125
|
+
async runSubAgent(agentName, task, callbacks) {
|
|
126
|
+
const config = this.subAgents.get(agentName);
|
|
127
|
+
if (!config) {
|
|
128
|
+
throw new Error(`Unknown sub-agent: ${agentName}`);
|
|
129
|
+
}
|
|
130
|
+
const agent = new Agent({
|
|
131
|
+
name: config.name,
|
|
132
|
+
systemPrompt: config.systemPrompt,
|
|
133
|
+
tools: config.tools,
|
|
134
|
+
maxIterations: 10,
|
|
135
|
+
}, this.apiClient, this.toolExecutor);
|
|
136
|
+
return agent.run(task, callbacks?.onChunk, callbacks?.onToolStart, callbacks?.onToolEnd);
|
|
137
|
+
}
|
|
138
|
+
setPlanMode(enabled) {
|
|
139
|
+
this.planMode = enabled;
|
|
140
|
+
}
|
|
141
|
+
isPlanMode() {
|
|
142
|
+
return this.planMode;
|
|
143
|
+
}
|
|
144
|
+
getSubAgents() {
|
|
145
|
+
return Array.from(this.subAgents.values());
|
|
146
|
+
}
|
|
147
|
+
registerSubAgent(config) {
|
|
148
|
+
this.subAgents.set(config.name, config);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/core/agents/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bluehawks CLI - API Client
|
|
3
|
+
* OpenAI-compatible API client with streaming support
|
|
4
|
+
*/
|
|
5
|
+
import { type APIClientOptions, type ChatCompletionRequest, type ChatCompletionResponse, type ChatCompletionChunk, type Message, type ToolCall, type ToolDefinition, type ToolResult } from './types.js';
|
|
6
|
+
export declare class APIClient {
|
|
7
|
+
private baseUrl;
|
|
8
|
+
private apiKey;
|
|
9
|
+
private model;
|
|
10
|
+
private maxTokens;
|
|
11
|
+
private temperature;
|
|
12
|
+
private timeout;
|
|
13
|
+
constructor(options?: APIClientOptions);
|
|
14
|
+
/**
|
|
15
|
+
* Create a chat completion (non-streaming)
|
|
16
|
+
*/
|
|
17
|
+
createChatCompletion(messages: Message[], tools?: ToolDefinition[], toolChoice?: ChatCompletionRequest['tool_choice']): Promise<ChatCompletionResponse>;
|
|
18
|
+
/**
|
|
19
|
+
* Create a streaming chat completion
|
|
20
|
+
*/
|
|
21
|
+
createStreamingChatCompletion(messages: Message[], _tools?: ToolDefinition[], _toolChoice?: ChatCompletionRequest['tool_choice']): AsyncGenerator<ChatCompletionChunk>;
|
|
22
|
+
/**
|
|
23
|
+
* Convenience method to stream and collect tool calls
|
|
24
|
+
*/
|
|
25
|
+
streamChatCompletion(messages: Message[], tools?: ToolDefinition[], onChunk?: (content: string) => void, onToolCalls?: (toolCalls: ToolCall[]) => void): Promise<{
|
|
26
|
+
content: string;
|
|
27
|
+
toolCalls: ToolCall[];
|
|
28
|
+
finishReason: string;
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* Send tool results back to the API
|
|
32
|
+
*/
|
|
33
|
+
sendToolResults(messages: Message[], toolResults: ToolResult[], tools?: ToolDefinition[], onChunk?: (content: string) => void, onToolCalls?: (toolCalls: ToolCall[]) => void): Promise<{
|
|
34
|
+
content: string;
|
|
35
|
+
toolCalls: ToolCall[];
|
|
36
|
+
finishReason: string;
|
|
37
|
+
}>;
|
|
38
|
+
private getHeaders;
|
|
39
|
+
private makeRequest;
|
|
40
|
+
private fetchWithRetry;
|
|
41
|
+
private delay;
|
|
42
|
+
get currentModel(): string;
|
|
43
|
+
get currentBaseUrl(): string;
|
|
44
|
+
}
|
|
45
|
+
export declare const apiClient: APIClient;
|
|
46
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/api/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,UAAU,EAGlB,MAAM,YAAY,CAAC;AAEpB,qBAAa,SAAS;IAClB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,gBAAqB;IAS1C;;OAEG;IACG,oBAAoB,CACtB,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,CAAC,EAAE,cAAc,EAAE,EACxB,UAAU,CAAC,EAAE,qBAAqB,CAAC,aAAa,CAAC,GAClD,OAAO,CAAC,sBAAsB,CAAC;IAmBlC;;OAEG;IACI,6BAA6B,CAChC,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,CAAC,EAAE,cAAc,EAAE,EACzB,WAAW,CAAC,EAAE,qBAAqB,CAAC,aAAa,CAAC,GACnD,cAAc,CAAC,mBAAmB,CAAC;IA4DtC;;OAEG;IACG,oBAAoB,CACtB,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,CAAC,EAAE,cAAc,EAAE,EACxB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACnC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,GAC9C,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAuD5E;;OAEG;IACG,eAAe,CACjB,QAAQ,EAAE,OAAO,EAAE,EACnB,WAAW,EAAE,UAAU,EAAE,EACzB,KAAK,CAAC,EAAE,cAAc,EAAE,EACxB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACnC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,IAAI,GAC9C,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAY5E,OAAO,CAAC,UAAU;YAYJ,WAAW;YAeX,cAAc;IAoC5B,OAAO,CAAC,KAAK;IAKb,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;CACJ;AAGD,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|