@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,294 @@
1
+ /**
2
+ * Bluehawks CLI - Git Tools
3
+ * Tools for Git operations
4
+ */
5
+ import { simpleGit } from 'simple-git';
6
+ import { toolRegistry } from '../registry.js';
7
+ function getGit(cwd) {
8
+ return simpleGit(cwd || process.cwd());
9
+ }
10
+ const gitStatusTool = {
11
+ name: 'git_status',
12
+ safeToAutoRun: true,
13
+ definition: {
14
+ type: 'function',
15
+ function: {
16
+ name: 'git_status',
17
+ description: 'Get the current Git status of the repository.',
18
+ parameters: {
19
+ type: 'object',
20
+ properties: {
21
+ cwd: {
22
+ type: 'string',
23
+ description: 'The working directory. Defaults to current directory.',
24
+ },
25
+ },
26
+ required: [],
27
+ },
28
+ },
29
+ },
30
+ async execute(args) {
31
+ const cwd = args.cwd;
32
+ const git = getGit(cwd);
33
+ const status = await git.status();
34
+ const lines = [];
35
+ lines.push(`Branch: ${status.current || 'unknown'}`);
36
+ lines.push(`Tracking: ${status.tracking || 'none'}`);
37
+ if (status.ahead > 0)
38
+ lines.push(`Ahead: ${status.ahead} commits`);
39
+ if (status.behind > 0)
40
+ lines.push(`Behind: ${status.behind} commits`);
41
+ if (status.staged.length > 0) {
42
+ lines.push('\nStaged changes:');
43
+ status.staged.forEach((f) => lines.push(` ✓ ${f}`));
44
+ }
45
+ if (status.modified.length > 0) {
46
+ lines.push('\nModified:');
47
+ status.modified.forEach((f) => lines.push(` M ${f}`));
48
+ }
49
+ if (status.not_added.length > 0) {
50
+ lines.push('\nUntracked:');
51
+ status.not_added.forEach((f) => lines.push(` ? ${f}`));
52
+ }
53
+ if (status.deleted.length > 0) {
54
+ lines.push('\nDeleted:');
55
+ status.deleted.forEach((f) => lines.push(` D ${f}`));
56
+ }
57
+ if (status.staged.length === 0 &&
58
+ status.modified.length === 0 &&
59
+ status.not_added.length === 0 &&
60
+ status.deleted.length === 0) {
61
+ lines.push('\nWorking tree clean');
62
+ }
63
+ return lines.join('\n');
64
+ },
65
+ };
66
+ const gitDiffTool = {
67
+ name: 'git_diff',
68
+ safeToAutoRun: true,
69
+ definition: {
70
+ type: 'function',
71
+ function: {
72
+ name: 'git_diff',
73
+ description: 'Show git diff for the repository or specific files.',
74
+ parameters: {
75
+ type: 'object',
76
+ properties: {
77
+ files: {
78
+ type: 'array',
79
+ items: { type: 'string' },
80
+ description: 'Optional list of files to show diff for.',
81
+ },
82
+ staged: {
83
+ type: 'boolean',
84
+ description: 'Show diff for staged changes. Default is false.',
85
+ },
86
+ cwd: {
87
+ type: 'string',
88
+ description: 'The working directory.',
89
+ },
90
+ },
91
+ required: [],
92
+ },
93
+ },
94
+ },
95
+ async execute(args) {
96
+ const files = args.files;
97
+ const staged = args.staged ?? false;
98
+ const cwd = args.cwd;
99
+ const git = getGit(cwd);
100
+ const options = staged ? ['--staged'] : [];
101
+ if (files && files.length > 0) {
102
+ options.push('--', ...files);
103
+ }
104
+ const diff = await git.diff(options);
105
+ if (!diff.trim()) {
106
+ return staged ? 'No staged changes' : 'No changes';
107
+ }
108
+ return diff;
109
+ },
110
+ };
111
+ const gitLogTool = {
112
+ name: 'git_log',
113
+ safeToAutoRun: true,
114
+ definition: {
115
+ type: 'function',
116
+ function: {
117
+ name: 'git_log',
118
+ description: 'Show git commit history.',
119
+ parameters: {
120
+ type: 'object',
121
+ properties: {
122
+ count: {
123
+ type: 'number',
124
+ description: 'Number of commits to show. Default is 10.',
125
+ },
126
+ file: {
127
+ type: 'string',
128
+ description: 'Show history for a specific file.',
129
+ },
130
+ cwd: {
131
+ type: 'string',
132
+ description: 'The working directory.',
133
+ },
134
+ },
135
+ required: [],
136
+ },
137
+ },
138
+ },
139
+ async execute(args) {
140
+ const count = args.count || 10;
141
+ const file = args.file;
142
+ const cwd = args.cwd;
143
+ const git = getGit(cwd);
144
+ const options = [`-n`, `${count}`, '--oneline'];
145
+ if (file) {
146
+ options.push('--', file);
147
+ }
148
+ const log = await git.log(options);
149
+ if (!log.all || log.all.length === 0) {
150
+ return 'No commits found';
151
+ }
152
+ return log.all
153
+ .map((commit) => `${commit.hash.substring(0, 7)} ${commit.message}`)
154
+ .join('\n');
155
+ },
156
+ };
157
+ const gitCommitTool = {
158
+ name: 'git_commit',
159
+ safeToAutoRun: false,
160
+ definition: {
161
+ type: 'function',
162
+ function: {
163
+ name: 'git_commit',
164
+ description: 'Create a Git commit with the staged changes.',
165
+ parameters: {
166
+ type: 'object',
167
+ properties: {
168
+ message: {
169
+ type: 'string',
170
+ description: 'The commit message.',
171
+ },
172
+ cwd: {
173
+ type: 'string',
174
+ description: 'The working directory.',
175
+ },
176
+ },
177
+ required: ['message'],
178
+ },
179
+ },
180
+ },
181
+ async execute(args) {
182
+ const message = args.message;
183
+ const cwd = args.cwd;
184
+ const git = getGit(cwd);
185
+ const result = await git.commit(message);
186
+ return `Committed: ${result.commit || 'unknown'}\nSummary: ${result.summary.changes} files changed, ${result.summary.insertions} insertions, ${result.summary.deletions} deletions`;
187
+ },
188
+ };
189
+ const gitAddTool = {
190
+ name: 'git_add',
191
+ safeToAutoRun: false,
192
+ definition: {
193
+ type: 'function',
194
+ function: {
195
+ name: 'git_add',
196
+ description: 'Stage files for commit.',
197
+ parameters: {
198
+ type: 'object',
199
+ properties: {
200
+ files: {
201
+ type: 'array',
202
+ items: { type: 'string' },
203
+ description: 'Files to stage. Use ["."] to stage all changes.',
204
+ },
205
+ cwd: {
206
+ type: 'string',
207
+ description: 'The working directory.',
208
+ },
209
+ },
210
+ required: ['files'],
211
+ },
212
+ },
213
+ },
214
+ async execute(args) {
215
+ const files = args.files;
216
+ const cwd = args.cwd;
217
+ const git = getGit(cwd);
218
+ await git.add(files);
219
+ return `Staged: ${files.join(', ')}`;
220
+ },
221
+ };
222
+ const gitBranchTool = {
223
+ name: 'git_branch',
224
+ safeToAutoRun: true,
225
+ definition: {
226
+ type: 'function',
227
+ function: {
228
+ name: 'git_branch',
229
+ description: 'List, create, or switch Git branches.',
230
+ parameters: {
231
+ type: 'object',
232
+ properties: {
233
+ action: {
234
+ type: 'string',
235
+ enum: ['list', 'create', 'switch', 'delete'],
236
+ description: 'The action to perform. Default is "list".',
237
+ },
238
+ name: {
239
+ type: 'string',
240
+ description: 'Branch name (required for create, switch, delete).',
241
+ },
242
+ cwd: {
243
+ type: 'string',
244
+ description: 'The working directory.',
245
+ },
246
+ },
247
+ required: [],
248
+ },
249
+ },
250
+ },
251
+ async execute(args) {
252
+ const action = args.action || 'list';
253
+ const name = args.name;
254
+ const cwd = args.cwd;
255
+ const git = getGit(cwd);
256
+ switch (action) {
257
+ case 'list': {
258
+ const branches = await git.branch();
259
+ return branches.all
260
+ .map((b) => (b === branches.current ? `* ${b}` : ` ${b}`))
261
+ .join('\n');
262
+ }
263
+ case 'create': {
264
+ if (!name)
265
+ throw new Error('Branch name is required');
266
+ await git.checkoutLocalBranch(name);
267
+ return `Created and switched to branch: ${name}`;
268
+ }
269
+ case 'switch': {
270
+ if (!name)
271
+ throw new Error('Branch name is required');
272
+ await git.checkout(name);
273
+ return `Switched to branch: ${name}`;
274
+ }
275
+ case 'delete': {
276
+ if (!name)
277
+ throw new Error('Branch name is required');
278
+ await git.deleteLocalBranch(name);
279
+ return `Deleted branch: ${name}`;
280
+ }
281
+ default:
282
+ throw new Error(`Unknown action: ${action}`);
283
+ }
284
+ },
285
+ };
286
+ export function registerGitTools() {
287
+ toolRegistry.register(gitStatusTool);
288
+ toolRegistry.register(gitDiffTool);
289
+ toolRegistry.register(gitLogTool);
290
+ toolRegistry.register(gitCommitTool);
291
+ toolRegistry.register(gitAddTool);
292
+ toolRegistry.register(gitBranchTool);
293
+ }
294
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../src/core/tools/definitions/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Bluehawks CLI - Tool Definitions Index
3
+ * Register all tools
4
+ */
5
+ export declare function registerAllTools(): void;
6
+ export * from './file.js';
7
+ export * from './shell.js';
8
+ export * from './search.js';
9
+ export * from './git.js';
10
+ export * from './web.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/tools/definitions/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAED,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Bluehawks CLI - Tool Definitions Index
3
+ * Register all tools
4
+ */
5
+ import { registerFileTools } from './file.js';
6
+ import { registerShellTools } from './shell.js';
7
+ import { registerSearchTools } from './search.js';
8
+ import { registerGitTools } from './git.js';
9
+ import { registerWebTools } from './web.js';
10
+ export function registerAllTools() {
11
+ registerFileTools();
12
+ registerShellTools();
13
+ registerSearchTools();
14
+ registerGitTools();
15
+ registerWebTools();
16
+ }
17
+ export * from './file.js';
18
+ export * from './shell.js';
19
+ export * from './search.js';
20
+ export * from './git.js';
21
+ export * from './web.js';
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/tools/definitions/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,UAAU,gBAAgB;IAC5B,iBAAiB,EAAE,CAAC;IACpB,kBAAkB,EAAE,CAAC;IACrB,mBAAmB,EAAE,CAAC;IACtB,gBAAgB,EAAE,CAAC;IACnB,gBAAgB,EAAE,CAAC;AACvB,CAAC;AAED,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Bluehawks CLI - Search Tools
3
+ * Tools for searching files and code
4
+ */
5
+ export declare function registerSearchTools(): void;
6
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../src/core/tools/definitions/search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmQH,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Bluehawks CLI - Search Tools
3
+ * Tools for searching files and code
4
+ */
5
+ import * as fs from 'node:fs/promises';
6
+ import * as path from 'node:path';
7
+ import { toolRegistry } from '../registry.js';
8
+ async function searchInFile(filePath, pattern, maxMatches) {
9
+ const matches = [];
10
+ try {
11
+ const content = await fs.readFile(filePath, 'utf-8');
12
+ const lines = content.split('\n');
13
+ for (let i = 0; i < lines.length && matches.length < maxMatches; i++) {
14
+ if (pattern.test(lines[i])) {
15
+ matches.push({
16
+ file: filePath,
17
+ line: i + 1,
18
+ content: lines[i].trim().substring(0, 200),
19
+ });
20
+ }
21
+ }
22
+ }
23
+ catch {
24
+ // Skip files that can't be read
25
+ }
26
+ return matches;
27
+ }
28
+ async function walkDirectory(dir, includes, excludes, maxDepth, currentDepth = 0) {
29
+ if (currentDepth > maxDepth)
30
+ return [];
31
+ const files = [];
32
+ try {
33
+ const entries = await fs.readdir(dir, { withFileTypes: true });
34
+ for (const entry of entries) {
35
+ const fullPath = path.join(dir, entry.name);
36
+ // Skip excluded patterns
37
+ if (excludes.some((ex) => entry.name === ex || entry.name.includes(ex))) {
38
+ continue;
39
+ }
40
+ if (entry.isDirectory()) {
41
+ const subFiles = await walkDirectory(fullPath, includes, excludes, maxDepth, currentDepth + 1);
42
+ files.push(...subFiles);
43
+ }
44
+ else if (entry.isFile()) {
45
+ // Check includes
46
+ if (includes.length === 0 || includes.some((inc) => entry.name.endsWith(inc))) {
47
+ files.push(fullPath);
48
+ }
49
+ }
50
+ }
51
+ }
52
+ catch {
53
+ // Skip directories we can't read
54
+ }
55
+ return files;
56
+ }
57
+ const grepSearchTool = {
58
+ name: 'grep_search',
59
+ safeToAutoRun: true,
60
+ definition: {
61
+ type: 'function',
62
+ function: {
63
+ name: 'grep_search',
64
+ description: 'Search for a pattern in files. Returns matching lines with file paths and line numbers.',
65
+ parameters: {
66
+ type: 'object',
67
+ properties: {
68
+ pattern: {
69
+ type: 'string',
70
+ description: 'The search pattern (regex supported).',
71
+ },
72
+ path: {
73
+ type: 'string',
74
+ description: 'The directory to search in. Defaults to current directory.',
75
+ },
76
+ includes: {
77
+ type: 'array',
78
+ items: { type: 'string' },
79
+ description: 'File extensions to include (e.g., [".ts", ".js"]).',
80
+ },
81
+ excludes: {
82
+ type: 'array',
83
+ items: { type: 'string' },
84
+ description: 'Patterns to exclude (e.g., ["node_modules", ".git"]).',
85
+ },
86
+ case_insensitive: {
87
+ type: 'boolean',
88
+ description: 'Whether to perform case-insensitive search. Default is false.',
89
+ },
90
+ max_results: {
91
+ type: 'number',
92
+ description: 'Maximum number of results to return. Default is 50.',
93
+ },
94
+ },
95
+ required: ['pattern'],
96
+ },
97
+ },
98
+ },
99
+ async execute(args) {
100
+ const patternStr = args.pattern;
101
+ const searchPath = args.path || process.cwd();
102
+ const includes = args.includes || [];
103
+ const excludes = args.excludes || ['node_modules', '.git', 'dist', 'build'];
104
+ const caseInsensitive = args.case_insensitive ?? false;
105
+ const maxResults = args.max_results || 50;
106
+ const absolutePath = path.resolve(process.cwd(), searchPath);
107
+ const flags = caseInsensitive ? 'gi' : 'g';
108
+ const pattern = new RegExp(patternStr, flags);
109
+ const files = await walkDirectory(absolutePath, includes, excludes, 10);
110
+ const allMatches = [];
111
+ for (const file of files) {
112
+ if (allMatches.length >= maxResults)
113
+ break;
114
+ const matches = await searchInFile(file, pattern, maxResults - allMatches.length);
115
+ for (const match of matches) {
116
+ allMatches.push({
117
+ ...match,
118
+ file: path.relative(process.cwd(), match.file),
119
+ });
120
+ }
121
+ }
122
+ if (allMatches.length === 0) {
123
+ return `No matches found for pattern: ${patternStr}`;
124
+ }
125
+ const output = allMatches
126
+ .map((m) => `${m.file}:${m.line}: ${m.content}`)
127
+ .join('\n');
128
+ return `Found ${allMatches.length} matches:\n\n${output}`;
129
+ },
130
+ };
131
+ const findFilesTool = {
132
+ name: 'find_files',
133
+ safeToAutoRun: true,
134
+ definition: {
135
+ type: 'function',
136
+ function: {
137
+ name: 'find_files',
138
+ description: 'Find files by name or pattern in a directory.',
139
+ parameters: {
140
+ type: 'object',
141
+ properties: {
142
+ pattern: {
143
+ type: 'string',
144
+ description: 'The filename pattern to search for (supports wildcards like *.ts).',
145
+ },
146
+ path: {
147
+ type: 'string',
148
+ description: 'The directory to search in. Defaults to current directory.',
149
+ },
150
+ type: {
151
+ type: 'string',
152
+ enum: ['file', 'directory', 'any'],
153
+ description: 'Type of entries to find. Default is "any".',
154
+ },
155
+ max_depth: {
156
+ type: 'number',
157
+ description: 'Maximum directory depth to search. Default is 10.',
158
+ },
159
+ max_results: {
160
+ type: 'number',
161
+ description: 'Maximum number of results. Default is 100.',
162
+ },
163
+ },
164
+ required: ['pattern'],
165
+ },
166
+ },
167
+ },
168
+ async execute(args) {
169
+ const pattern = args.pattern;
170
+ const searchPath = args.path || process.cwd();
171
+ const type = args.type || 'any';
172
+ const maxDepth = args.max_depth || 10;
173
+ const maxResults = args.max_results || 100;
174
+ const absolutePath = path.resolve(process.cwd(), searchPath);
175
+ const results = [];
176
+ // Convert glob pattern to regex
177
+ const regexPattern = pattern
178
+ .replace(/\./g, '\\.')
179
+ .replace(/\*/g, '.*')
180
+ .replace(/\?/g, '.');
181
+ const regex = new RegExp(`^${regexPattern}$`, 'i');
182
+ async function search(dir, depth) {
183
+ if (depth > maxDepth || results.length >= maxResults)
184
+ return;
185
+ try {
186
+ const entries = await fs.readdir(dir, { withFileTypes: true });
187
+ for (const entry of entries) {
188
+ if (results.length >= maxResults)
189
+ return;
190
+ // Skip common excludes
191
+ if (entry.name === 'node_modules' || entry.name === '.git')
192
+ continue;
193
+ const fullPath = path.join(dir, entry.name);
194
+ const relativePath = path.relative(absolutePath, fullPath);
195
+ const isMatch = regex.test(entry.name);
196
+ const matchesType = type === 'any' ||
197
+ (type === 'file' && entry.isFile()) ||
198
+ (type === 'directory' && entry.isDirectory());
199
+ if (isMatch && matchesType) {
200
+ const prefix = entry.isDirectory() ? '📁 ' : '📄 ';
201
+ results.push(prefix + relativePath);
202
+ }
203
+ if (entry.isDirectory()) {
204
+ await search(fullPath, depth + 1);
205
+ }
206
+ }
207
+ }
208
+ catch {
209
+ // Skip directories we can't read
210
+ }
211
+ }
212
+ await search(absolutePath, 0);
213
+ if (results.length === 0) {
214
+ return `No files found matching pattern: ${pattern}`;
215
+ }
216
+ return `Found ${results.length} matches:\n\n${results.join('\n')}`;
217
+ },
218
+ };
219
+ export function registerSearchTools() {
220
+ toolRegistry.register(grepSearchTool);
221
+ toolRegistry.register(findFilesTool);
222
+ }
223
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../src/core/tools/definitions/search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAQhE,KAAK,UAAU,YAAY,CACvB,QAAgB,EAChB,OAAe,EACf,UAAkB;IAElB,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACnE,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;iBAC7C,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,gCAAgC;IACpC,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,aAAa,CACxB,GAAW,EACX,QAAkB,EAClB,QAAkB,EAClB,QAAgB,EAChB,YAAY,GAAG,CAAC;IAEhB,IAAI,YAAY,GAAG,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE5C,yBAAyB;YACzB,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACtE,SAAS;YACb,CAAC;YAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;gBAC/F,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;YAC5B,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACxB,iBAAiB;gBACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBAC5E,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,iCAAiC;IACrC,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,cAAc,GAAgB;IAChC,IAAI,EAAE,aAAa;IACnB,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACN,IAAI,EAAE,aAAa;YACnB,WAAW,EACP,yFAAyF;YAC7F,UAAU,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACR,OAAO,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,uCAAuC;qBACvD;oBACD,IAAI,EAAE;wBACF,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,4DAA4D;qBAC5E;oBACD,QAAQ,EAAE;wBACN,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,WAAW,EAAE,oDAAoD;qBACpE;oBACD,QAAQ,EAAE;wBACN,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,WAAW,EAAE,uDAAuD;qBACvE;oBACD,gBAAgB,EAAE;wBACd,IAAI,EAAE,SAAS;wBACf,WAAW,EAAE,+DAA+D;qBAC/E;oBACD,WAAW,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,qDAAqD;qBACrE;iBACJ;gBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;aACxB;SACJ;KACJ;IACD,KAAK,CAAC,OAAO,CAAC,IAAI;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,OAAiB,CAAC;QAC1C,MAAM,UAAU,GAAI,IAAI,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,MAAM,QAAQ,GAAI,IAAI,CAAC,QAAqB,IAAI,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAI,IAAI,CAAC,QAAqB,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1F,MAAM,eAAe,GAAI,IAAI,CAAC,gBAA4B,IAAI,KAAK,CAAC;QACpE,MAAM,UAAU,GAAI,IAAI,CAAC,WAAsB,IAAI,EAAE,CAAC;QAEtD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAE9C,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,UAAU,GAAkB,EAAE,CAAC;QAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU;gBAAE,MAAM;YAE3C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YAClF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC1B,UAAU,CAAC,IAAI,CAAC;oBACZ,GAAG,KAAK;oBACR,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC;iBACjD,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,iCAAiC,UAAU,EAAE,CAAC;QACzD,CAAC;QAED,MAAM,MAAM,GAAG,UAAU;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhB,OAAO,SAAS,UAAU,CAAC,MAAM,gBAAgB,MAAM,EAAE,CAAC;IAC9D,CAAC;CACJ,CAAC;AAEF,MAAM,aAAa,GAAgB;IAC/B,IAAI,EAAE,YAAY;IAClB,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACN,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,+CAA+C;YAC5D,UAAU,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACR,OAAO,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,oEAAoE;qBACpF;oBACD,IAAI,EAAE;wBACF,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,4DAA4D;qBAC5E;oBACD,IAAI,EAAE;wBACF,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC;wBAClC,WAAW,EAAE,4CAA4C;qBAC5D;oBACD,SAAS,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,mDAAmD;qBACnE;oBACD,WAAW,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,4CAA4C;qBAC5D;iBACJ;gBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;aACxB;SACJ;KACJ;IACD,KAAK,CAAC,OAAO,CAAC,IAAI;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;QACvC,MAAM,UAAU,GAAI,IAAI,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAI,IAAI,CAAC,IAAe,IAAI,KAAK,CAAC;QAC5C,MAAM,QAAQ,GAAI,IAAI,CAAC,SAAoB,IAAI,EAAE,CAAC;QAClD,MAAM,UAAU,GAAI,IAAI,CAAC,WAAsB,IAAI,GAAG,CAAC;QAEvD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,gCAAgC;QAChC,MAAM,YAAY,GAAG,OAAO;aACvB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QAEnD,KAAK,UAAU,MAAM,CAAC,GAAW,EAAE,KAAa;YAC5C,IAAI,KAAK,GAAG,QAAQ,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU;gBAAE,OAAO;YAE7D,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC1B,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU;wBAAE,OAAO;oBAEzC,uBAAuB;oBACvB,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;wBAAE,SAAS;oBAErE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;oBAE3D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACvC,MAAM,WAAW,GACb,IAAI,KAAK,KAAK;wBACd,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;wBACnC,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;oBAElD,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;wBACzB,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;wBACnD,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;oBACxC,CAAC;oBAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;wBACtB,MAAM,MAAM,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACtC,CAAC;gBACL,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,iCAAiC;YACrC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAE9B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,oCAAoC,OAAO,EAAE,CAAC;QACzD,CAAC;QAED,OAAO,SAAS,OAAO,CAAC,MAAM,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACvE,CAAC;CACJ,CAAC;AAEF,MAAM,UAAU,mBAAmB;IAC/B,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Bluehawks CLI - Shell Command Tool
3
+ * Execute shell commands with safety controls
4
+ */
5
+ export declare function registerShellTools(): void;
6
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../../src/core/tools/definitions/shell.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6NH,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}