@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,190 @@
1
+ /**
2
+ * Bluehawks CLI - Shell Command Tool
3
+ * Execute shell commands with safety controls
4
+ */
5
+ import { spawn } from 'node:child_process';
6
+ import { toolRegistry } from '../registry.js';
7
+ import { COMMAND_TIMEOUT_MS, MAX_OUTPUT_LENGTH } from '../../../config/constants.js';
8
+ // Dangerous command patterns
9
+ const DANGEROUS_PATTERNS = [
10
+ /\brm\s+-rf?\s+[\/~]/i,
11
+ /\bsudo\b/i,
12
+ /\bchmod\s+777\b/i,
13
+ /\bchown\b/i,
14
+ /\bmkfs\b/i,
15
+ /\bdd\s+if=/i,
16
+ />\s*\/dev\//i,
17
+ /\bshutdown\b/i,
18
+ /\breboot\b/i,
19
+ /\bhalt\b/i,
20
+ /\bpoweroff\b/i,
21
+ ];
22
+ function isDangerousCommand(command) {
23
+ for (const pattern of DANGEROUS_PATTERNS) {
24
+ if (pattern.test(command)) {
25
+ return {
26
+ dangerous: true,
27
+ reason: `Command matches dangerous pattern: ${pattern.source}`,
28
+ };
29
+ }
30
+ }
31
+ return { dangerous: false };
32
+ }
33
+ async function executeCommand(command, cwd, timeout) {
34
+ return new Promise((resolve, reject) => {
35
+ // Determine shell based on platform
36
+ const shell = process.platform === 'win32' ? 'cmd.exe' : '/bin/bash';
37
+ const shellArgs = process.platform === 'win32' ? ['/c', command] : ['-c', command];
38
+ const child = spawn(shell, shellArgs, {
39
+ cwd,
40
+ env: { ...process.env, TERM: 'dumb' },
41
+ stdio: ['pipe', 'pipe', 'pipe'],
42
+ });
43
+ let stdout = '';
44
+ let stderr = '';
45
+ let killed = false;
46
+ const timeoutId = setTimeout(() => {
47
+ killed = true;
48
+ child.kill('SIGTERM');
49
+ // Force kill after 5 seconds if still running
50
+ setTimeout(() => child.kill('SIGKILL'), 5000);
51
+ }, timeout);
52
+ child.stdout?.on('data', (data) => {
53
+ stdout += data.toString();
54
+ // Truncate if too long
55
+ if (stdout.length > MAX_OUTPUT_LENGTH) {
56
+ stdout = stdout.substring(0, MAX_OUTPUT_LENGTH) + '\n... (output truncated)';
57
+ child.kill('SIGTERM');
58
+ }
59
+ });
60
+ child.stderr?.on('data', (data) => {
61
+ stderr += data.toString();
62
+ if (stderr.length > MAX_OUTPUT_LENGTH) {
63
+ stderr = stderr.substring(0, MAX_OUTPUT_LENGTH) + '\n... (output truncated)';
64
+ }
65
+ });
66
+ child.on('close', (code, signal) => {
67
+ clearTimeout(timeoutId);
68
+ if (killed && !signal) {
69
+ reject(new Error('Command timed out'));
70
+ }
71
+ else {
72
+ resolve({
73
+ stdout: stdout.trim(),
74
+ stderr: stderr.trim(),
75
+ exitCode: code,
76
+ signal: signal,
77
+ });
78
+ }
79
+ });
80
+ child.on('error', (error) => {
81
+ clearTimeout(timeoutId);
82
+ reject(error);
83
+ });
84
+ });
85
+ }
86
+ const runCommandTool = {
87
+ name: 'run_command',
88
+ safeToAutoRun: false,
89
+ definition: {
90
+ type: 'function',
91
+ function: {
92
+ name: 'run_command',
93
+ description: 'Execute a shell command. Use this for running tests, building projects, git commands, and other shell operations.',
94
+ parameters: {
95
+ type: 'object',
96
+ properties: {
97
+ command: {
98
+ type: 'string',
99
+ description: 'The shell command to execute.',
100
+ },
101
+ cwd: {
102
+ type: 'string',
103
+ description: 'The working directory for the command. Defaults to the current directory.',
104
+ },
105
+ timeout: {
106
+ type: 'number',
107
+ description: `Timeout in milliseconds. Default is ${COMMAND_TIMEOUT_MS}ms.`,
108
+ },
109
+ },
110
+ required: ['command'],
111
+ },
112
+ },
113
+ },
114
+ async execute(args) {
115
+ const command = args.command;
116
+ const cwd = args.cwd || process.cwd();
117
+ const timeout = args.timeout || COMMAND_TIMEOUT_MS;
118
+ // Check for dangerous commands
119
+ const dangerCheck = isDangerousCommand(command);
120
+ if (dangerCheck.dangerous) {
121
+ throw new Error(`Dangerous command detected: ${dangerCheck.reason}`);
122
+ }
123
+ const result = await executeCommand(command, cwd, timeout);
124
+ // Format output
125
+ let output = '';
126
+ if (result.stdout) {
127
+ output += result.stdout;
128
+ }
129
+ if (result.stderr) {
130
+ if (output)
131
+ output += '\n\n';
132
+ output += `STDERR:\n${result.stderr}`;
133
+ }
134
+ if (result.exitCode !== 0) {
135
+ output += `\n\nExit code: ${result.exitCode}`;
136
+ }
137
+ if (result.signal) {
138
+ output += `\n\nTerminated by signal: ${result.signal}`;
139
+ }
140
+ return output || '(no output)';
141
+ },
142
+ };
143
+ // Background command tool (for long-running processes)
144
+ const runBackgroundCommandTool = {
145
+ name: 'run_background_command',
146
+ safeToAutoRun: false,
147
+ definition: {
148
+ type: 'function',
149
+ function: {
150
+ name: 'run_background_command',
151
+ description: 'Start a background process like a dev server. The command will run in the background.',
152
+ parameters: {
153
+ type: 'object',
154
+ properties: {
155
+ command: {
156
+ type: 'string',
157
+ description: 'The shell command to run in the background.',
158
+ },
159
+ cwd: {
160
+ type: 'string',
161
+ description: 'The working directory for the command.',
162
+ },
163
+ },
164
+ required: ['command'],
165
+ },
166
+ },
167
+ },
168
+ async execute(args) {
169
+ const command = args.command;
170
+ const cwd = args.cwd || process.cwd();
171
+ const dangerCheck = isDangerousCommand(command);
172
+ if (dangerCheck.dangerous) {
173
+ throw new Error(`Dangerous command detected: ${dangerCheck.reason}`);
174
+ }
175
+ const shell = process.platform === 'win32' ? 'cmd.exe' : '/bin/bash';
176
+ const shellArgs = process.platform === 'win32' ? ['/c', command] : ['-c', command];
177
+ const child = spawn(shell, shellArgs, {
178
+ cwd,
179
+ detached: true,
180
+ stdio: 'ignore',
181
+ });
182
+ child.unref();
183
+ return `Started background process with PID: ${child.pid}\nCommand: ${command}`;
184
+ },
185
+ };
186
+ export function registerShellTools() {
187
+ toolRegistry.register(runCommandTool);
188
+ toolRegistry.register(runBackgroundCommandTool);
189
+ }
190
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../../src/core/tools/definitions/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Bluehawks CLI - Web Tools
3
+ * Tools for fetching web content
4
+ */
5
+ export declare function registerWebTools(): void;
6
+ //# sourceMappingURL=web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../../../src/core/tools/definitions/web.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2GH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Bluehawks CLI - Web Tools
3
+ * Tools for fetching web content
4
+ */
5
+ import { toolRegistry } from '../registry.js';
6
+ import { DEFAULT_TIMEOUT_MS } from '../../../config/constants.js';
7
+ const fetchUrlTool = {
8
+ name: 'fetch_url',
9
+ safeToAutoRun: true,
10
+ definition: {
11
+ type: 'function',
12
+ function: {
13
+ name: 'fetch_url',
14
+ description: 'Fetch content from a URL. Useful for reading documentation, API responses, or web pages.',
15
+ parameters: {
16
+ type: 'object',
17
+ properties: {
18
+ url: {
19
+ type: 'string',
20
+ description: 'The URL to fetch.',
21
+ },
22
+ method: {
23
+ type: 'string',
24
+ enum: ['GET', 'POST', 'PUT', 'DELETE'],
25
+ description: 'HTTP method. Default is GET.',
26
+ },
27
+ headers: {
28
+ type: 'object',
29
+ description: 'Optional HTTP headers as key-value pairs.',
30
+ },
31
+ body: {
32
+ type: 'string',
33
+ description: 'Optional request body for POST/PUT.',
34
+ },
35
+ timeout: {
36
+ type: 'number',
37
+ description: 'Timeout in milliseconds.',
38
+ },
39
+ },
40
+ required: ['url'],
41
+ },
42
+ },
43
+ },
44
+ async execute(args) {
45
+ const url = args.url;
46
+ const method = args.method || 'GET';
47
+ const headers = args.headers || {};
48
+ const body = args.body;
49
+ const timeout = args.timeout || DEFAULT_TIMEOUT_MS;
50
+ const controller = new AbortController();
51
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
52
+ try {
53
+ const response = await fetch(url, {
54
+ method,
55
+ headers: {
56
+ 'User-Agent': 'Bluehawks-CLI/1.0',
57
+ ...headers,
58
+ },
59
+ body: body && ['POST', 'PUT'].includes(method) ? body : undefined,
60
+ signal: controller.signal,
61
+ });
62
+ clearTimeout(timeoutId);
63
+ const contentType = response.headers.get('content-type') || '';
64
+ let content;
65
+ if (contentType.includes('application/json')) {
66
+ const json = await response.json();
67
+ content = JSON.stringify(json, null, 2);
68
+ }
69
+ else {
70
+ content = await response.text();
71
+ // Simple HTML to text conversion
72
+ if (contentType.includes('text/html')) {
73
+ content = content
74
+ .replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '')
75
+ .replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi, '')
76
+ .replace(/<[^>]+>/g, '\n')
77
+ .replace(/&nbsp;/g, ' ')
78
+ .replace(/&lt;/g, '<')
79
+ .replace(/&gt;/g, '>')
80
+ .replace(/&amp;/g, '&')
81
+ .replace(/\n\s*\n/g, '\n\n')
82
+ .trim();
83
+ }
84
+ }
85
+ // Truncate if too long
86
+ const maxLength = 50000;
87
+ if (content.length > maxLength) {
88
+ content = content.substring(0, maxLength) + '\n... (content truncated)';
89
+ }
90
+ return `Status: ${response.status} ${response.statusText}\n\n${content}`;
91
+ }
92
+ catch (error) {
93
+ clearTimeout(timeoutId);
94
+ if (error instanceof Error && error.name === 'AbortError') {
95
+ throw new Error('Request timed out');
96
+ }
97
+ throw error;
98
+ }
99
+ },
100
+ };
101
+ export function registerWebTools() {
102
+ toolRegistry.register(fetchUrlTool);
103
+ }
104
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../../src/core/tools/definitions/web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Bluehawks CLI - Tool Executor
3
+ * Executes tools with safety controls and output handling
4
+ */
5
+ import type { ToolCall, ToolResult } from '../api/types.js';
6
+ export type ApprovalMode = 'always' | 'never' | 'unsafe-only';
7
+ export interface ExecutorOptions {
8
+ approvalMode: ApprovalMode;
9
+ onApprovalRequest?: (toolName: string, args: Record<string, unknown>) => Promise<boolean>;
10
+ onToolStart?: (toolName: string, args: Record<string, unknown>) => void;
11
+ onToolEnd?: (toolName: string, result: string, isError: boolean) => void;
12
+ }
13
+ export declare class ToolExecutor {
14
+ private options;
15
+ constructor(options?: Partial<ExecutorOptions>);
16
+ executeToolCalls(toolCalls: ToolCall[]): Promise<ToolResult[]>;
17
+ executeToolCall(toolCall: ToolCall): Promise<ToolResult>;
18
+ private needsApproval;
19
+ private requestApproval;
20
+ setApprovalMode(mode: ApprovalMode): void;
21
+ setApprovalHandler(handler: (toolName: string, args: Record<string, unknown>) => Promise<boolean>): void;
22
+ }
23
+ export declare const toolExecutor: ToolExecutor;
24
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/core/tools/executor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG5D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1F,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACxE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5E;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,OAAO,CAAkB;gBAErB,OAAO,GAAE,OAAO,CAAC,eAAe,CAAM;IAS5C,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAW9D,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;YAmEhD,aAAa;YAab,eAAe;IAY7B,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAIzC,kBAAkB,CACd,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAC/E,IAAI;CAGV;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Bluehawks CLI - Tool Executor
3
+ * Executes tools with safety controls and output handling
4
+ */
5
+ import { toolRegistry } from './registry.js';
6
+ import { MAX_OUTPUT_LENGTH } from '../../config/constants.js';
7
+ export class ToolExecutor {
8
+ options;
9
+ constructor(options = {}) {
10
+ this.options = {
11
+ approvalMode: options.approvalMode || 'unsafe-only',
12
+ onApprovalRequest: options.onApprovalRequest,
13
+ onToolStart: options.onToolStart,
14
+ onToolEnd: options.onToolEnd,
15
+ };
16
+ }
17
+ async executeToolCalls(toolCalls) {
18
+ const results = [];
19
+ for (const toolCall of toolCalls) {
20
+ const result = await this.executeToolCall(toolCall);
21
+ results.push(result);
22
+ }
23
+ return results;
24
+ }
25
+ async executeToolCall(toolCall) {
26
+ const { id, function: fn } = toolCall;
27
+ const { name, arguments: argsString } = fn;
28
+ let args;
29
+ try {
30
+ args = JSON.parse(argsString);
31
+ }
32
+ catch {
33
+ return {
34
+ tool_call_id: id,
35
+ content: `Error: Failed to parse tool arguments: ${argsString}`,
36
+ isError: true,
37
+ };
38
+ }
39
+ const handler = toolRegistry.get(name);
40
+ if (!handler) {
41
+ return {
42
+ tool_call_id: id,
43
+ content: `Error: Unknown tool: ${name}`,
44
+ isError: true,
45
+ };
46
+ }
47
+ // Check if approval is needed
48
+ const needsApproval = await this.needsApproval(handler);
49
+ if (needsApproval) {
50
+ const approved = await this.requestApproval(name, args);
51
+ if (!approved) {
52
+ return {
53
+ tool_call_id: id,
54
+ content: 'Tool execution was denied by the user.',
55
+ isError: true,
56
+ };
57
+ }
58
+ }
59
+ // Execute the tool
60
+ this.options.onToolStart?.(name, args);
61
+ try {
62
+ let result = await handler.execute(args);
63
+ // Truncate output if too long
64
+ if (result.length > MAX_OUTPUT_LENGTH) {
65
+ result = result.substring(0, MAX_OUTPUT_LENGTH) + '\n... (output truncated)';
66
+ }
67
+ this.options.onToolEnd?.(name, result, false);
68
+ return {
69
+ tool_call_id: id,
70
+ content: result,
71
+ isError: false,
72
+ };
73
+ }
74
+ catch (error) {
75
+ const errorMessage = error instanceof Error ? error.message : String(error);
76
+ this.options.onToolEnd?.(name, errorMessage, true);
77
+ return {
78
+ tool_call_id: id,
79
+ content: `Error: ${errorMessage}`,
80
+ isError: true,
81
+ };
82
+ }
83
+ }
84
+ async needsApproval(handler) {
85
+ switch (this.options.approvalMode) {
86
+ case 'never':
87
+ return false;
88
+ case 'always':
89
+ return true;
90
+ case 'unsafe-only':
91
+ return !handler.safeToAutoRun;
92
+ default:
93
+ return !handler.safeToAutoRun;
94
+ }
95
+ }
96
+ async requestApproval(toolName, args) {
97
+ if (!this.options.onApprovalRequest) {
98
+ // If no approval handler, deny by default
99
+ return false;
100
+ }
101
+ return this.options.onApprovalRequest(toolName, args);
102
+ }
103
+ setApprovalMode(mode) {
104
+ this.options.approvalMode = mode;
105
+ }
106
+ setApprovalHandler(handler) {
107
+ this.options.onApprovalRequest = handler;
108
+ }
109
+ }
110
+ export const toolExecutor = new ToolExecutor();
111
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/core/tools/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './registry.js';
2
+ export * from './executor.js';
3
+ export * from './definitions/index.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './registry.js';
2
+ export * from './executor.js';
3
+ export * from './definitions/index.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Bluehawks CLI - Tool Registry
3
+ * Central registry for all available tools
4
+ */
5
+ import type { ToolDefinition } from '../api/types.js';
6
+ export interface ToolHandler {
7
+ name: string;
8
+ definition: ToolDefinition;
9
+ execute: (args: Record<string, unknown>) => Promise<string>;
10
+ safeToAutoRun: boolean;
11
+ }
12
+ declare class ToolRegistry {
13
+ private tools;
14
+ register(handler: ToolHandler): void;
15
+ get(name: string): ToolHandler | undefined;
16
+ getAll(): ToolHandler[];
17
+ getDefinitions(): ToolDefinition[];
18
+ has(name: string): boolean;
19
+ isSafeToAutoRun(name: string): boolean;
20
+ }
21
+ export declare const toolRegistry: ToolRegistry;
22
+ export {};
23
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/tools/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED,cAAM,YAAY;IACd,OAAO,CAAC,KAAK,CAAuC;IAEpD,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI1C,MAAM,IAAI,WAAW,EAAE;IAIvB,cAAc,IAAI,cAAc,EAAE;IAIlC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAIzC;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Bluehawks CLI - Tool Registry
3
+ * Central registry for all available tools
4
+ */
5
+ class ToolRegistry {
6
+ tools = new Map();
7
+ register(handler) {
8
+ this.tools.set(handler.name, handler);
9
+ }
10
+ get(name) {
11
+ return this.tools.get(name);
12
+ }
13
+ getAll() {
14
+ return Array.from(this.tools.values());
15
+ }
16
+ getDefinitions() {
17
+ return this.getAll().map((handler) => handler.definition);
18
+ }
19
+ has(name) {
20
+ return this.tools.has(name);
21
+ }
22
+ isSafeToAutoRun(name) {
23
+ const handler = this.tools.get(name);
24
+ return handler?.safeToAutoRun ?? false;
25
+ }
26
+ }
27
+ export const toolRegistry = new ToolRegistry();
28
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/tools/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,YAAY;IACN,KAAK,GAA6B,IAAI,GAAG,EAAE,CAAC;IAEpD,QAAQ,CAAC,OAAoB;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,CAAC,IAAY;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,MAAM;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,cAAc;QACV,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED,GAAG,CAAC,IAAY;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,eAAe,CAAC,IAAY;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,OAAO,EAAE,aAAa,IAAI,KAAK,CAAC;IAC3C,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Bluehawks CLI - Entry Point
4
+ * A production-ready multi-agent AI CLI assistant
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}