@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,68 @@
1
+ /**
2
+ * Bluehawks CLI - Hooks Types
3
+ * Type definitions for the hooks system
4
+ */
5
+ export type HookEvent = 'SessionStart' | 'UserPromptSubmit' | 'PreToolUse' | 'PostToolUse' | 'PostToolUseFailure' | 'Stop' | 'SessionEnd';
6
+ export interface HookContext {
7
+ sessionId: string;
8
+ projectPath: string;
9
+ model: string;
10
+ timestamp: string;
11
+ }
12
+ export interface SessionStartInput extends HookContext {
13
+ cwd: string;
14
+ }
15
+ export interface UserPromptSubmitInput extends HookContext {
16
+ prompt: string;
17
+ }
18
+ export interface PreToolUseInput extends HookContext {
19
+ toolName: string;
20
+ toolInput: Record<string, unknown>;
21
+ }
22
+ export interface PostToolUseInput extends HookContext {
23
+ toolName: string;
24
+ toolInput: Record<string, unknown>;
25
+ toolOutput: string;
26
+ duration: number;
27
+ }
28
+ export interface PostToolUseFailureInput extends HookContext {
29
+ toolName: string;
30
+ toolInput: Record<string, unknown>;
31
+ error: string;
32
+ }
33
+ export interface StopInput extends HookContext {
34
+ reason: 'completed' | 'cancelled' | 'error';
35
+ messageCount: number;
36
+ }
37
+ export interface SessionEndInput extends HookContext {
38
+ duration: number;
39
+ tokensUsed: number;
40
+ }
41
+ export type HookInput = SessionStartInput | UserPromptSubmitInput | PreToolUseInput | PostToolUseInput | PostToolUseFailureInput | StopInput | SessionEndInput;
42
+ export interface HookOutput {
43
+ block?: boolean;
44
+ blockReason?: string;
45
+ modifiedInput?: Record<string, unknown>;
46
+ addContent?: string;
47
+ data?: Record<string, unknown>;
48
+ }
49
+ export interface HookHandler {
50
+ id: string;
51
+ name: string;
52
+ event: HookEvent;
53
+ command?: string;
54
+ handler?: (input: HookInput) => Promise<HookOutput | void>;
55
+ async?: boolean;
56
+ timeout?: number;
57
+ matcher?: string | RegExp;
58
+ }
59
+ export interface HooksConfig {
60
+ SessionStart?: HookHandler[];
61
+ UserPromptSubmit?: HookHandler[];
62
+ PreToolUse?: HookHandler[];
63
+ PostToolUse?: HookHandler[];
64
+ PostToolUseFailure?: HookHandler[];
65
+ Stop?: HookHandler[];
66
+ SessionEnd?: HookHandler[];
67
+ }
68
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/hooks/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GACf,cAAc,GACd,kBAAkB,GAClB,YAAY,GACZ,aAAa,GACb,oBAAoB,GACpB,MAAM,GACN,YAAY,CAAC;AAEnB,MAAM,WAAW,WAAW;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IAClD,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACtD,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAwB,SAAQ,WAAW;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAU,SAAQ,WAAW;IAC1C,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,GACf,iBAAiB,GACjB,qBAAqB,GACrB,eAAe,GACf,gBAAgB,GAChB,uBAAuB,GACvB,SAAS,GACT,eAAe,CAAC;AAEtB,MAAM,WAAW,UAAU;IAEvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGxC,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAExB,EAAE,EAAE,MAAM,CAAC;IAGX,IAAI,EAAE,MAAM,CAAC;IAGb,KAAK,EAAE,SAAS,CAAC;IAGjB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAG3D,KAAK,CAAC,EAAE,OAAO,CAAC;IAGhB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IACxB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,gBAAgB,CAAC,EAAE,WAAW,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,WAAW,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;CAC9B"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Bluehawks CLI - Hooks Types
3
+ * Type definitions for the hooks system
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/hooks/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Bluehawks CLI - MCP Client
3
+ * Model Context Protocol client for connecting to external data sources
4
+ */
5
+ export interface MCPServerConfig {
6
+ command: string;
7
+ args?: string[];
8
+ env?: Record<string, string>;
9
+ }
10
+ export interface MCPTool {
11
+ name: string;
12
+ description: string;
13
+ inputSchema: {
14
+ type: string;
15
+ properties?: Record<string, unknown>;
16
+ required?: string[];
17
+ };
18
+ }
19
+ export interface MCPResource {
20
+ uri: string;
21
+ name: string;
22
+ description?: string;
23
+ mimeType?: string;
24
+ }
25
+ export declare class MCPClient {
26
+ private serverName;
27
+ private process;
28
+ private requestId;
29
+ private pendingRequests;
30
+ private tools;
31
+ private resources;
32
+ private reader;
33
+ constructor(serverName: string);
34
+ connect(config: MCPServerConfig): Promise<void>;
35
+ private sendRequest;
36
+ private sendNotification;
37
+ listTools(): Promise<MCPTool[]>;
38
+ listResources(): Promise<MCPResource[]>;
39
+ callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
40
+ readResource(uri: string): Promise<{
41
+ contents: unknown[];
42
+ }>;
43
+ getTools(): MCPTool[];
44
+ getResources(): MCPResource[];
45
+ getServerName(): string;
46
+ disconnect(): Promise<void>;
47
+ }
48
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;CACL;AAED,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAgBD,qBAAa,SAAS;IAClB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,eAAe,CAGlB;IACL,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAmC;gBAErC,UAAU,EAAE,MAAM;IAIxB,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAkDrD,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,gBAAgB;IAWlB,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAM/B,aAAa,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAMvC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAQvE,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAKjE,QAAQ,IAAI,OAAO,EAAE;IAIrB,YAAY,IAAI,WAAW,EAAE;IAI7B,aAAa,IAAI,MAAM;IAIjB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAUpC"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Bluehawks CLI - MCP Client
3
+ * Model Context Protocol client for connecting to external data sources
4
+ */
5
+ import { spawn } from 'node:child_process';
6
+ import * as readline from 'node:readline';
7
+ export class MCPClient {
8
+ serverName;
9
+ process = null;
10
+ requestId = 0;
11
+ pendingRequests = new Map();
12
+ tools = [];
13
+ resources = [];
14
+ reader = null;
15
+ constructor(serverName) {
16
+ this.serverName = serverName;
17
+ }
18
+ async connect(config) {
19
+ return new Promise((resolve, reject) => {
20
+ this.process = spawn(config.command, config.args || [], {
21
+ stdio: ['pipe', 'pipe', 'pipe'],
22
+ env: { ...process.env, ...config.env },
23
+ });
24
+ if (!this.process.stdout || !this.process.stdin) {
25
+ reject(new Error('Failed to create MCP process'));
26
+ return;
27
+ }
28
+ this.reader = readline.createInterface({
29
+ input: this.process.stdout,
30
+ });
31
+ this.reader.on('line', (line) => {
32
+ try {
33
+ const response = JSON.parse(line);
34
+ const pending = this.pendingRequests.get(response.id);
35
+ if (pending) {
36
+ this.pendingRequests.delete(response.id);
37
+ if (response.error) {
38
+ pending.reject(new Error(response.error.message));
39
+ }
40
+ else {
41
+ pending.resolve(response.result);
42
+ }
43
+ }
44
+ }
45
+ catch {
46
+ // Ignore non-JSON output
47
+ }
48
+ });
49
+ this.process.on('error', (err) => {
50
+ reject(err);
51
+ });
52
+ // Initialize the MCP connection
53
+ this.sendRequest('initialize', {
54
+ protocolVersion: '2024-11-05',
55
+ capabilities: {},
56
+ clientInfo: { name: 'bluehawks-cli', version: '1.0.0' },
57
+ }).then(() => {
58
+ // Send initialized notification
59
+ this.sendNotification('notifications/initialized');
60
+ resolve();
61
+ }).catch(reject);
62
+ });
63
+ }
64
+ sendRequest(method, params) {
65
+ return new Promise((resolve, reject) => {
66
+ if (!this.process?.stdin) {
67
+ reject(new Error('MCP process not connected'));
68
+ return;
69
+ }
70
+ const id = ++this.requestId;
71
+ const request = {
72
+ jsonrpc: '2.0',
73
+ id,
74
+ method,
75
+ params,
76
+ };
77
+ this.pendingRequests.set(id, { resolve, reject });
78
+ this.process.stdin.write(JSON.stringify(request) + '\n');
79
+ // Timeout after 30 seconds
80
+ setTimeout(() => {
81
+ if (this.pendingRequests.has(id)) {
82
+ this.pendingRequests.delete(id);
83
+ reject(new Error(`Request ${method} timed out`));
84
+ }
85
+ }, 30000);
86
+ });
87
+ }
88
+ sendNotification(method, params) {
89
+ if (!this.process?.stdin)
90
+ return;
91
+ const notification = {
92
+ jsonrpc: '2.0',
93
+ method,
94
+ params,
95
+ };
96
+ this.process.stdin.write(JSON.stringify(notification) + '\n');
97
+ }
98
+ async listTools() {
99
+ const result = await this.sendRequest('tools/list');
100
+ this.tools = result.tools || [];
101
+ return this.tools;
102
+ }
103
+ async listResources() {
104
+ const result = await this.sendRequest('resources/list');
105
+ this.resources = result.resources || [];
106
+ return this.resources;
107
+ }
108
+ async callTool(name, args) {
109
+ const result = await this.sendRequest('tools/call', {
110
+ name,
111
+ arguments: args,
112
+ });
113
+ return result;
114
+ }
115
+ async readResource(uri) {
116
+ const result = await this.sendRequest('resources/read', { uri });
117
+ return result;
118
+ }
119
+ getTools() {
120
+ return this.tools;
121
+ }
122
+ getResources() {
123
+ return this.resources;
124
+ }
125
+ getServerName() {
126
+ return this.serverName;
127
+ }
128
+ async disconnect() {
129
+ if (this.reader) {
130
+ this.reader.close();
131
+ }
132
+ if (this.process) {
133
+ this.process.kill();
134
+ this.process = null;
135
+ }
136
+ this.pendingRequests.clear();
137
+ }
138
+ }
139
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/mcp/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './client.js';
2
+ export * from './manager.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './client.js';
2
+ export * from './manager.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Bluehawks CLI - MCP Manager
3
+ * Manages MCP server connections and integrates tools
4
+ */
5
+ import { MCPClient, type MCPServerConfig } from './client.js';
6
+ export interface MCPConfig {
7
+ mcpServers?: Record<string, MCPServerConfig>;
8
+ }
9
+ export declare class MCPManager {
10
+ private clients;
11
+ constructor();
12
+ /**
13
+ * Load MCP configuration from file
14
+ */
15
+ loadConfig(): Promise<MCPConfig | null>;
16
+ /**
17
+ * Connect to all configured MCP servers
18
+ */
19
+ connectAll(): Promise<void>;
20
+ /**
21
+ * Connect to a specific MCP server
22
+ */
23
+ connect(name: string, config: MCPServerConfig): Promise<MCPClient>;
24
+ /**
25
+ * Register an MCP tool as a Bluehawks tool
26
+ */
27
+ private registerMCPTool;
28
+ /**
29
+ * Get all connected clients
30
+ */
31
+ getClients(): Map<string, MCPClient>;
32
+ /**
33
+ * Get a specific client
34
+ */
35
+ getClient(name: string): MCPClient | undefined;
36
+ /**
37
+ * Disconnect all MCP servers
38
+ */
39
+ disconnectAll(): Promise<void>;
40
+ /**
41
+ * Disconnect a specific server
42
+ */
43
+ disconnect(name: string): Promise<void>;
44
+ }
45
+ export declare const mcpManager: MCPManager;
46
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAgB,MAAM,aAAa,CAAC;AAI5E,MAAM,WAAW,SAAS;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAChD;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,OAAO,CAAqC;;IAMpD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAiB7C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAejC;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAcxE;;OAEG;IACH,OAAO,CAAC,eAAe;IAkCvB;;OAEG;IACH,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;IAIpC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI9C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOhD;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAC"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Bluehawks CLI - MCP Manager
3
+ * Manages MCP server connections and integrates tools
4
+ */
5
+ import * as fs from 'node:fs/promises';
6
+ import * as path from 'node:path';
7
+ import * as os from 'node:os';
8
+ import { MCPClient } from './client.js';
9
+ import { toolRegistry } from '../tools/index.js';
10
+ export class MCPManager {
11
+ clients = new Map();
12
+ constructor() {
13
+ // Manager initialized - config will be loaded on connectAll
14
+ }
15
+ /**
16
+ * Load MCP configuration from file
17
+ */
18
+ async loadConfig() {
19
+ const paths = [
20
+ path.join(process.cwd(), '.mcp.json'),
21
+ path.join(os.homedir(), '.bluehawks', '.mcp.json'),
22
+ ];
23
+ for (const configPath of paths) {
24
+ try {
25
+ const content = await fs.readFile(configPath, 'utf-8');
26
+ return JSON.parse(content);
27
+ }
28
+ catch {
29
+ continue;
30
+ }
31
+ }
32
+ return null;
33
+ }
34
+ /**
35
+ * Connect to all configured MCP servers
36
+ */
37
+ async connectAll() {
38
+ const config = await this.loadConfig();
39
+ if (!config?.mcpServers) {
40
+ return;
41
+ }
42
+ for (const [name, serverConfig] of Object.entries(config.mcpServers)) {
43
+ try {
44
+ await this.connect(name, serverConfig);
45
+ }
46
+ catch (error) {
47
+ console.error(`Failed to connect to MCP server ${name}:`, error);
48
+ }
49
+ }
50
+ }
51
+ /**
52
+ * Connect to a specific MCP server
53
+ */
54
+ async connect(name, config) {
55
+ const client = new MCPClient(name);
56
+ await client.connect(config);
57
+ // List and register tools
58
+ const tools = await client.listTools();
59
+ for (const tool of tools) {
60
+ this.registerMCPTool(name, tool);
61
+ }
62
+ this.clients.set(name, client);
63
+ return client;
64
+ }
65
+ /**
66
+ * Register an MCP tool as a Bluehawks tool
67
+ */
68
+ registerMCPTool(serverName, mcpTool) {
69
+ const toolName = `mcp_${serverName}_${mcpTool.name}`;
70
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
71
+ const definition = {
72
+ type: 'function',
73
+ function: {
74
+ name: toolName,
75
+ description: `[MCP:${serverName}] ${mcpTool.description}`,
76
+ parameters: mcpTool.inputSchema,
77
+ },
78
+ };
79
+ const clients = this.clients;
80
+ toolRegistry.register({
81
+ name: toolName,
82
+ definition,
83
+ execute: async (args) => {
84
+ const client = clients.get(serverName);
85
+ if (!client) {
86
+ return `MCP server ${serverName} not connected`;
87
+ }
88
+ try {
89
+ const result = await client.callTool(mcpTool.name, args);
90
+ return typeof result === 'string' ? result : JSON.stringify(result, null, 2);
91
+ }
92
+ catch (error) {
93
+ return `MCP tool error: ${error instanceof Error ? error.message : String(error)}`;
94
+ }
95
+ },
96
+ safeToAutoRun: false, // MCP tools require approval by default
97
+ });
98
+ }
99
+ /**
100
+ * Get all connected clients
101
+ */
102
+ getClients() {
103
+ return this.clients;
104
+ }
105
+ /**
106
+ * Get a specific client
107
+ */
108
+ getClient(name) {
109
+ return this.clients.get(name);
110
+ }
111
+ /**
112
+ * Disconnect all MCP servers
113
+ */
114
+ async disconnectAll() {
115
+ for (const client of this.clients.values()) {
116
+ await client.disconnect();
117
+ }
118
+ this.clients.clear();
119
+ }
120
+ /**
121
+ * Disconnect a specific server
122
+ */
123
+ async disconnect(name) {
124
+ const client = this.clients.get(name);
125
+ if (client) {
126
+ await client.disconnect();
127
+ this.clients.delete(name);
128
+ }
129
+ }
130
+ }
131
+ // Singleton instance
132
+ export const mcpManager = new MCPManager();
133
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/core/mcp/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './types.js';
2
+ export * from './loader.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './types.js';
2
+ export * from './loader.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Bluehawks CLI - Plugin Loader
3
+ * Discovers and loads plugins from plugin directories
4
+ */
5
+ import type { LoadedPlugin, PluginDiscovery, PluginContext } from './types.js';
6
+ export declare class PluginLoader {
7
+ private plugins;
8
+ private commandHandlers;
9
+ /**
10
+ * Discover all plugins in plugin directories
11
+ */
12
+ discover(): Promise<PluginDiscovery[]>;
13
+ /**
14
+ * Load all discovered plugins
15
+ */
16
+ loadAll(): Promise<void>;
17
+ /**
18
+ * Load a single plugin
19
+ */
20
+ load(discovery: PluginDiscovery): Promise<LoadedPlugin>;
21
+ /**
22
+ * Load a command handler from file
23
+ */
24
+ private loadCommandHandler;
25
+ /**
26
+ * Load a tool handler from file
27
+ */
28
+ private loadToolHandler;
29
+ /**
30
+ * Create a hook handler from plugin config
31
+ */
32
+ private createHookHandler;
33
+ /**
34
+ * Register a plugin tool with the tool registry
35
+ */
36
+ private registerPluginTool;
37
+ /**
38
+ * Execute a plugin command
39
+ */
40
+ executeCommand(commandName: string, args: string[], context: PluginContext): Promise<string | null>;
41
+ /**
42
+ * Check if a command is a plugin command
43
+ */
44
+ hasCommand(commandName: string): boolean;
45
+ /**
46
+ * Get all loaded plugins
47
+ */
48
+ getPlugins(): LoadedPlugin[];
49
+ /**
50
+ * Get a specific plugin
51
+ */
52
+ getPlugin(name: string): LoadedPlugin | undefined;
53
+ /**
54
+ * Get all plugin agents
55
+ */
56
+ getAgents(): Map<string, LoadedPlugin['agents']>;
57
+ /**
58
+ * Unload all plugins
59
+ */
60
+ unloadAll(): void;
61
+ }
62
+ export declare const pluginLoader: PluginLoader;
63
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/plugins/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAER,YAAY,EACZ,eAAe,EAGf,aAAa,EAChB,MAAM,YAAY,CAAC;AAWpB,qBAAa,YAAY;IACrB,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,eAAe,CAAgD;IAEvE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IA6B5C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAY9B;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IA6D7D;;OAEG;YACW,kBAAkB;IAehC;;OAEG;YACW,eAAe;IAa7B;;OAEG;YACW,iBAAiB;IAiC/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACG,cAAc,CAChB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,aAAa,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQzB;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,UAAU,IAAI,YAAY,EAAE;IAI5B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD;;OAEG;IACH,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAUhD;;OAEG;IACH,SAAS,IAAI,IAAI;CAUpB;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}