@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.
Files changed (176) hide show
  1. package/.eslintrc.json +36 -0
  2. package/.prettierrc +8 -0
  3. package/README.md +288 -0
  4. package/dist/cli/app.d.ts +12 -0
  5. package/dist/cli/app.d.ts.map +1 -0
  6. package/dist/cli/app.js +201 -0
  7. package/dist/cli/app.js.map +1 -0
  8. package/dist/cli/commands/index.d.ts +56 -0
  9. package/dist/cli/commands/index.d.ts.map +1 -0
  10. package/dist/cli/commands/index.js +201 -0
  11. package/dist/cli/commands/index.js.map +1 -0
  12. package/dist/config/constants.d.ts +32 -0
  13. package/dist/config/constants.d.ts.map +1 -0
  14. package/dist/config/constants.js +39 -0
  15. package/dist/config/constants.js.map +1 -0
  16. package/dist/config/index.d.ts +4 -0
  17. package/dist/config/index.d.ts.map +1 -0
  18. package/dist/config/index.js +4 -0
  19. package/dist/config/index.js.map +1 -0
  20. package/dist/config/schema.d.ts +56 -0
  21. package/dist/config/schema.d.ts.map +1 -0
  22. package/dist/config/schema.js +28 -0
  23. package/dist/config/schema.js.map +1 -0
  24. package/dist/config/settings.d.ts +20 -0
  25. package/dist/config/settings.d.ts.map +1 -0
  26. package/dist/config/settings.js +102 -0
  27. package/dist/config/settings.js.map +1 -0
  28. package/dist/core/agents/agent.d.ts +33 -0
  29. package/dist/core/agents/agent.d.ts.map +1 -0
  30. package/dist/core/agents/agent.js +156 -0
  31. package/dist/core/agents/agent.js.map +1 -0
  32. package/dist/core/agents/index.d.ts +3 -0
  33. package/dist/core/agents/index.d.ts.map +1 -0
  34. package/dist/core/agents/index.js +3 -0
  35. package/dist/core/agents/index.js.map +1 -0
  36. package/dist/core/agents/orchestrator.d.ts +56 -0
  37. package/dist/core/agents/orchestrator.d.ts.map +1 -0
  38. package/dist/core/agents/orchestrator.js +151 -0
  39. package/dist/core/agents/orchestrator.js.map +1 -0
  40. package/dist/core/api/client.d.ts +46 -0
  41. package/dist/core/api/client.d.ts.map +1 -0
  42. package/dist/core/api/client.js +223 -0
  43. package/dist/core/api/client.js.map +1 -0
  44. package/dist/core/api/index.d.ts +3 -0
  45. package/dist/core/api/index.d.ts.map +1 -0
  46. package/dist/core/api/index.js +3 -0
  47. package/dist/core/api/index.js.map +1 -0
  48. package/dist/core/api/types.d.ts +126 -0
  49. package/dist/core/api/types.d.ts.map +1 -0
  50. package/dist/core/api/types.js +16 -0
  51. package/dist/core/api/types.js.map +1 -0
  52. package/dist/core/hooks/index.d.ts +3 -0
  53. package/dist/core/hooks/index.d.ts.map +1 -0
  54. package/dist/core/hooks/index.js +3 -0
  55. package/dist/core/hooks/index.js.map +1 -0
  56. package/dist/core/hooks/manager.d.ts +43 -0
  57. package/dist/core/hooks/manager.d.ts.map +1 -0
  58. package/dist/core/hooks/manager.js +178 -0
  59. package/dist/core/hooks/manager.js.map +1 -0
  60. package/dist/core/hooks/types.d.ts +68 -0
  61. package/dist/core/hooks/types.d.ts.map +1 -0
  62. package/dist/core/hooks/types.js +6 -0
  63. package/dist/core/hooks/types.js.map +1 -0
  64. package/dist/core/mcp/client.d.ts +48 -0
  65. package/dist/core/mcp/client.d.ts.map +1 -0
  66. package/dist/core/mcp/client.js +139 -0
  67. package/dist/core/mcp/client.js.map +1 -0
  68. package/dist/core/mcp/index.d.ts +3 -0
  69. package/dist/core/mcp/index.d.ts.map +1 -0
  70. package/dist/core/mcp/index.js +3 -0
  71. package/dist/core/mcp/index.js.map +1 -0
  72. package/dist/core/mcp/manager.d.ts +46 -0
  73. package/dist/core/mcp/manager.d.ts.map +1 -0
  74. package/dist/core/mcp/manager.js +133 -0
  75. package/dist/core/mcp/manager.js.map +1 -0
  76. package/dist/core/plugins/index.d.ts +3 -0
  77. package/dist/core/plugins/index.d.ts.map +1 -0
  78. package/dist/core/plugins/index.js +3 -0
  79. package/dist/core/plugins/index.js.map +1 -0
  80. package/dist/core/plugins/loader.d.ts +63 -0
  81. package/dist/core/plugins/loader.d.ts.map +1 -0
  82. package/dist/core/plugins/loader.js +258 -0
  83. package/dist/core/plugins/loader.js.map +1 -0
  84. package/dist/core/plugins/types.d.ts +95 -0
  85. package/dist/core/plugins/types.d.ts.map +1 -0
  86. package/dist/core/plugins/types.js +6 -0
  87. package/dist/core/plugins/types.js.map +1 -0
  88. package/dist/core/session/index.d.ts +3 -0
  89. package/dist/core/session/index.d.ts.map +1 -0
  90. package/dist/core/session/index.js +3 -0
  91. package/dist/core/session/index.js.map +1 -0
  92. package/dist/core/session/manager.d.ts +57 -0
  93. package/dist/core/session/manager.d.ts.map +1 -0
  94. package/dist/core/session/manager.js +182 -0
  95. package/dist/core/session/manager.js.map +1 -0
  96. package/dist/core/session/storage.d.ts +42 -0
  97. package/dist/core/session/storage.d.ts.map +1 -0
  98. package/dist/core/session/storage.js +138 -0
  99. package/dist/core/session/storage.js.map +1 -0
  100. package/dist/core/tools/definitions/file.d.ts +6 -0
  101. package/dist/core/tools/definitions/file.d.ts.map +1 -0
  102. package/dist/core/tools/definitions/file.js +276 -0
  103. package/dist/core/tools/definitions/file.js.map +1 -0
  104. package/dist/core/tools/definitions/git.d.ts +6 -0
  105. package/dist/core/tools/definitions/git.d.ts.map +1 -0
  106. package/dist/core/tools/definitions/git.js +294 -0
  107. package/dist/core/tools/definitions/git.js.map +1 -0
  108. package/dist/core/tools/definitions/index.d.ts +11 -0
  109. package/dist/core/tools/definitions/index.d.ts.map +1 -0
  110. package/dist/core/tools/definitions/index.js +22 -0
  111. package/dist/core/tools/definitions/index.js.map +1 -0
  112. package/dist/core/tools/definitions/search.d.ts +6 -0
  113. package/dist/core/tools/definitions/search.d.ts.map +1 -0
  114. package/dist/core/tools/definitions/search.js +223 -0
  115. package/dist/core/tools/definitions/search.js.map +1 -0
  116. package/dist/core/tools/definitions/shell.d.ts +6 -0
  117. package/dist/core/tools/definitions/shell.d.ts.map +1 -0
  118. package/dist/core/tools/definitions/shell.js +190 -0
  119. package/dist/core/tools/definitions/shell.js.map +1 -0
  120. package/dist/core/tools/definitions/web.d.ts +6 -0
  121. package/dist/core/tools/definitions/web.d.ts.map +1 -0
  122. package/dist/core/tools/definitions/web.js +104 -0
  123. package/dist/core/tools/definitions/web.js.map +1 -0
  124. package/dist/core/tools/executor.d.ts +24 -0
  125. package/dist/core/tools/executor.d.ts.map +1 -0
  126. package/dist/core/tools/executor.js +111 -0
  127. package/dist/core/tools/executor.js.map +1 -0
  128. package/dist/core/tools/index.d.ts +4 -0
  129. package/dist/core/tools/index.d.ts.map +1 -0
  130. package/dist/core/tools/index.js +4 -0
  131. package/dist/core/tools/index.js.map +1 -0
  132. package/dist/core/tools/registry.d.ts +23 -0
  133. package/dist/core/tools/registry.d.ts.map +1 -0
  134. package/dist/core/tools/registry.js +28 -0
  135. package/dist/core/tools/registry.js.map +1 -0
  136. package/dist/index.d.ts +7 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +352 -0
  139. package/dist/index.js.map +1 -0
  140. package/package.json +62 -0
  141. package/src/cli/app.tsx +319 -0
  142. package/src/cli/commands/index.ts +261 -0
  143. package/src/config/constants.ts +45 -0
  144. package/src/config/index.ts +3 -0
  145. package/src/config/schema.ts +36 -0
  146. package/src/config/settings.ts +121 -0
  147. package/src/core/agents/agent.ts +205 -0
  148. package/src/core/agents/index.ts +2 -0
  149. package/src/core/agents/orchestrator.ts +223 -0
  150. package/src/core/api/client.ts +300 -0
  151. package/src/core/api/index.ts +2 -0
  152. package/src/core/api/types.ts +149 -0
  153. package/src/core/hooks/index.ts +2 -0
  154. package/src/core/hooks/manager.ts +212 -0
  155. package/src/core/hooks/types.ts +116 -0
  156. package/src/core/mcp/client.ts +198 -0
  157. package/src/core/mcp/index.ts +2 -0
  158. package/src/core/mcp/manager.ts +153 -0
  159. package/src/core/plugins/index.ts +2 -0
  160. package/src/core/plugins/loader.ts +312 -0
  161. package/src/core/plugins/types.ts +111 -0
  162. package/src/core/session/index.ts +2 -0
  163. package/src/core/session/manager.ts +246 -0
  164. package/src/core/session/storage.ts +184 -0
  165. package/src/core/tools/definitions/file.ts +312 -0
  166. package/src/core/tools/definitions/git.ts +326 -0
  167. package/src/core/tools/definitions/index.ts +24 -0
  168. package/src/core/tools/definitions/search.ts +266 -0
  169. package/src/core/tools/definitions/shell.ts +228 -0
  170. package/src/core/tools/definitions/web.ts +113 -0
  171. package/src/core/tools/executor.ts +145 -0
  172. package/src/core/tools/index.ts +3 -0
  173. package/src/core/tools/registry.ts +44 -0
  174. package/src/index.ts +407 -0
  175. package/tsconfig.json +40 -0
  176. 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":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAgBjD,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,WAAoC,EACpC,SAAkD;QAElD,iCAAiC;QACjC,IAAI,CAAC,QAAQ,GAAG;YACZ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE;YAC9C,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;QAEtB,OAAO,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,UAAU,EAAE,CAAC;YAEb,6FAA6F;YAC7F,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CACtD,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,KAAK,EACV,MAAM,CACT,CAAC;YAEF,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,qDAAqD;YACrD,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3E,YAAY,GAAG,OAAO,CAAC;gBACvB,yDAAyD;gBACzD,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;oBAC1B,8CAA8C;oBAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACvB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;wBACpB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,mCAAmC;oBAClF,CAAC;gBACL,CAAC;gBACD,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,CAAC,CAAC;gBACxB,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,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,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;SACb,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"}
@@ -0,0 +1,3 @@
1
+ export * from './agent.js';
2
+ export * from './orchestrator.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export * from './agent.js';
2
+ export * from './orchestrator.js';
3
+ //# sourceMappingURL=index.js.map
@@ -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"}