hawkeye-mcp-server 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 (70) hide show
  1. package/CHANGELOG.md +123 -0
  2. package/INSTALLATION.md +734 -0
  3. package/LICENSE +21 -0
  4. package/README.md +289 -0
  5. package/SPECIFICATION.md +1073 -0
  6. package/USAGE.md +849 -0
  7. package/build/config/config.d.ts +58 -0
  8. package/build/config/config.js +100 -0
  9. package/build/config/config.js.map +1 -0
  10. package/build/index.d.ts +6 -0
  11. package/build/index.js +138 -0
  12. package/build/index.js.map +1 -0
  13. package/build/services/auth.service.d.ts +34 -0
  14. package/build/services/auth.service.js +96 -0
  15. package/build/services/auth.service.js.map +1 -0
  16. package/build/services/project.service.d.ts +50 -0
  17. package/build/services/project.service.js +136 -0
  18. package/build/services/project.service.js.map +1 -0
  19. package/build/services/session.service.d.ts +68 -0
  20. package/build/services/session.service.js +357 -0
  21. package/build/services/session.service.js.map +1 -0
  22. package/build/tools/continue-investigation.d.ts +10 -0
  23. package/build/tools/continue-investigation.js +84 -0
  24. package/build/tools/continue-investigation.js.map +1 -0
  25. package/build/tools/get-incident-report.d.ts +10 -0
  26. package/build/tools/get-incident-report.js +62 -0
  27. package/build/tools/get-incident-report.js.map +1 -0
  28. package/build/tools/get-session-report.d.ts +25 -0
  29. package/build/tools/get-session-report.js +46 -0
  30. package/build/tools/get-session-report.js.map +1 -0
  31. package/build/tools/get-session-summary.d.ts +22 -0
  32. package/build/tools/get-session-summary.js +41 -0
  33. package/build/tools/get-session-summary.js.map +1 -0
  34. package/build/tools/get-status.d.ts +10 -0
  35. package/build/tools/get-status.js +129 -0
  36. package/build/tools/get-status.js.map +1 -0
  37. package/build/tools/index.d.ts +29 -0
  38. package/build/tools/index.js +349 -0
  39. package/build/tools/index.js.map +1 -0
  40. package/build/tools/inspect-session.d.ts +28 -0
  41. package/build/tools/inspect-session.js +51 -0
  42. package/build/tools/inspect-session.js.map +1 -0
  43. package/build/tools/investigate-alert.d.ts +10 -0
  44. package/build/tools/investigate-alert.js +122 -0
  45. package/build/tools/investigate-alert.js.map +1 -0
  46. package/build/tools/list-sessions.d.ts +49 -0
  47. package/build/tools/list-sessions.js +79 -0
  48. package/build/tools/list-sessions.js.map +1 -0
  49. package/build/types/errors.d.ts +61 -0
  50. package/build/types/errors.js +76 -0
  51. package/build/types/errors.js.map +1 -0
  52. package/build/types/hawkeye.d.ts +238 -0
  53. package/build/types/hawkeye.js +8 -0
  54. package/build/types/hawkeye.js.map +1 -0
  55. package/build/types/mcp.d.ts +125 -0
  56. package/build/types/mcp.js +6 -0
  57. package/build/types/mcp.js.map +1 -0
  58. package/build/utils/errors.d.ts +20 -0
  59. package/build/utils/errors.js +125 -0
  60. package/build/utils/errors.js.map +1 -0
  61. package/build/utils/http-client.d.ts +51 -0
  62. package/build/utils/http-client.js +133 -0
  63. package/build/utils/http-client.js.map +1 -0
  64. package/build/utils/logger.d.ts +35 -0
  65. package/build/utils/logger.js +77 -0
  66. package/build/utils/logger.js.map +1 -0
  67. package/build/utils/validation.d.ts +134 -0
  68. package/build/utils/validation.js +68 -0
  69. package/build/utils/validation.js.map +1 -0
  70. package/package.json +66 -0
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Tool: hawkeye_inspect_session
3
+ * Gets detailed information about a session including all prompt cycles
4
+ */
5
+ import { ToolServices } from './index.js';
6
+ import { z } from 'zod';
7
+ /**
8
+ * Input validation schema
9
+ */
10
+ declare const InspectSessionInputSchema: z.ZodObject<{
11
+ session_uuid: z.ZodString;
12
+ project_uuid: z.ZodOptional<z.ZodString>;
13
+ organization_uuid: z.ZodOptional<z.ZodString>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ session_uuid: string;
16
+ project_uuid?: string | undefined;
17
+ organization_uuid?: string | undefined;
18
+ }, {
19
+ session_uuid: string;
20
+ project_uuid?: string | undefined;
21
+ organization_uuid?: string | undefined;
22
+ }>;
23
+ export type InspectSessionInput = z.infer<typeof InspectSessionInputSchema>;
24
+ /**
25
+ * Inspect session to get detailed information
26
+ */
27
+ export declare function inspectSession(services: ToolServices, args: unknown): Promise<any>;
28
+ export {};
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Tool: hawkeye_inspect_session
3
+ * Gets detailed information about a session including all prompt cycles
4
+ */
5
+ import { getConfig } from '../config/config.js';
6
+ import { logger } from '../utils/logger.js';
7
+ import { z } from 'zod';
8
+ /**
9
+ * Input validation schema
10
+ */
11
+ const InspectSessionInputSchema = z.object({
12
+ session_uuid: z.string(),
13
+ project_uuid: z.string().optional(),
14
+ organization_uuid: z.string().optional(),
15
+ });
16
+ /**
17
+ * Inspect session to get detailed information
18
+ */
19
+ export async function inspectSession(services, args) {
20
+ const config = getConfig();
21
+ const input = InspectSessionInputSchema.parse(args);
22
+ logger.info('Inspecting session', { sessionUuid: input.session_uuid });
23
+ // Get project UUID (use default if not provided)
24
+ const projectUuid = input.project_uuid || (await services.projectService.getDefaultProject()).uuid;
25
+ const organizationUuid = input.organization_uuid || config.defaultOrganizationUuid;
26
+ // Inspect the session
27
+ const sessionDetails = await services.sessionService.inspectSession(input.session_uuid, projectUuid, organizationUuid);
28
+ logger.info('Session inspection complete');
29
+ // Format the response
30
+ const session_info = sessionDetails.session_info || {
31
+ session_uuid: sessionDetails.session_uuid || sessionDetails.uuid || input.session_uuid,
32
+ name: sessionDetails.name || '',
33
+ create_time: sessionDetails.create_time || sessionDetails.created_at || '',
34
+ last_update: sessionDetails.last_update || sessionDetails.updated_at || '',
35
+ };
36
+ const prompt_cycles = sessionDetails.prompt_cycle || [];
37
+ return {
38
+ session_info,
39
+ prompt_cycles: prompt_cycles.map((cycle) => ({
40
+ id: cycle.id,
41
+ status: cycle.status,
42
+ request: cycle.request,
43
+ final_answer: cycle.final_answer,
44
+ chain_of_thoughts: cycle.chain_of_thoughts || [],
45
+ sources: cycle.sources || [],
46
+ follow_up_suggestions: cycle.follow_up_suggestions || [],
47
+ })),
48
+ prompt_cycle_count: prompt_cycles.length,
49
+ };
50
+ }
51
+ //# sourceMappingURL=inspect-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-session.js","sourceRoot":"","sources":["../../src/tools/inspect-session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAsB,EACtB,IAAa;IAEb,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEpD,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAEvE,iDAAiD;IACjD,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,MAAM,QAAQ,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC;IACnG,MAAM,gBAAgB,GAAG,KAAK,CAAC,iBAAiB,IAAI,MAAM,CAAC,uBAAuB,CAAC;IAEnF,sBAAsB;IACtB,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,cAAc,CACjE,KAAK,CAAC,YAAY,EAClB,WAAW,EACX,gBAAgB,CACjB,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAE3C,sBAAsB;IACtB,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,IAAI;QAClD,YAAY,EAAE,cAAc,CAAC,YAAY,IAAI,cAAc,CAAC,IAAI,IAAI,KAAK,CAAC,YAAY;QACtF,IAAI,EAAE,cAAc,CAAC,IAAI,IAAI,EAAE;QAC/B,WAAW,EAAE,cAAc,CAAC,WAAW,IAAI,cAAc,CAAC,UAAU,IAAI,EAAE;QAC1E,WAAW,EAAE,cAAc,CAAC,WAAW,IAAI,cAAc,CAAC,UAAU,IAAI,EAAE;KAC3E,CAAC;IAEF,MAAM,aAAa,GAAG,cAAc,CAAC,YAAY,IAAI,EAAE,CAAC;IAExD,OAAO;QACL,YAAY;QACZ,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;YAChD,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,EAAE;YAChD,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;YAC5B,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,IAAI,EAAE;SACzD,CAAC,CAAC;QACH,kBAAkB,EAAE,aAAa,CAAC,MAAM;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tool: hawkeye_investigate_alert
3
+ * Finds existing RCA or creates new investigation for an alert ID
4
+ */
5
+ import { ToolServices } from './index.js';
6
+ import { InvestigateAlertOutput } from '../types/mcp.js';
7
+ /**
8
+ * Investigate an alert by ID
9
+ */
10
+ export declare function investigateAlert(services: ToolServices, args: unknown): Promise<InvestigateAlertOutput>;
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Tool: hawkeye_investigate_alert
3
+ * Finds existing RCA or creates new investigation for an alert ID
4
+ */
5
+ import { InvestigateAlertInputSchema } from '../utils/validation.js';
6
+ import { getConfig } from '../config/config.js';
7
+ import { logger } from '../utils/logger.js';
8
+ /**
9
+ * Investigate an alert by ID
10
+ */
11
+ export async function investigateAlert(services, args) {
12
+ const config = getConfig();
13
+ const input = InvestigateAlertInputSchema.parse(args);
14
+ logger.info('Investigating alert', { alertId: input.alert_id });
15
+ // Get project UUID (use default if not provided)
16
+ const projectUuid = input.project_uuid || (await services.projectService.getDefaultProject()).uuid;
17
+ const organizationUuid = config.defaultOrganizationUuid;
18
+ // Step 1: Search for existing sessions with this alert ID
19
+ logger.info('Searching for existing sessions', { alertId: input.alert_id, projectUuid });
20
+ const existingSessions = await services.sessionService.findSessionsByAlertId(input.alert_id, projectUuid, organizationUuid);
21
+ // If we found existing session(s), return the most recent one
22
+ if (existingSessions.length > 0) {
23
+ logger.info(`Found ${existingSessions.length} existing session(s) for alert`);
24
+ // Sort by updated_at to get the most recent
25
+ const latestSession = existingSessions.sort((a, b) => {
26
+ const aTime = a.last_update || a.updated_at || a.create_time || a.created_at || '';
27
+ const bTime = b.last_update || b.updated_at || b.create_time || b.created_at || '';
28
+ return new Date(bTime).getTime() - new Date(aTime).getTime();
29
+ })[0];
30
+ const sessionUuid = latestSession.session_uuid || latestSession.uuid || '';
31
+ logger.info('Using most recent session', { sessionUuid });
32
+ // Inspect the session to get full details
33
+ const sessionDetails = await services.sessionService.inspectSession(sessionUuid, projectUuid, organizationUuid);
34
+ // Check if investigation is complete
35
+ const isComplete = sessionDetails.final_answer !== undefined && sessionDetails.final_answer !== null;
36
+ return {
37
+ status: isComplete ? 'completed' : 'in_progress',
38
+ session_uuid: sessionUuid,
39
+ investigation_results: isComplete ? formatInvestigationResults(sessionDetails) : undefined,
40
+ message: isComplete
41
+ ? `Found completed investigation for alert ${input.alert_id}`
42
+ : `Found in-progress investigation for alert ${input.alert_id}. Use hawkeye_get_investigation_status to check progress.`,
43
+ };
44
+ }
45
+ // Step 2: No existing session found, create a new investigation
46
+ logger.info('No existing session found, creating new investigation');
47
+ // Create a new session
48
+ const session = await services.sessionService.createSession(projectUuid, organizationUuid);
49
+ const sessionUuid = session.session_uuid || session.uuid || '';
50
+ logger.info('Created new session', { sessionUuid });
51
+ // Send investigation prompt
52
+ const investigationPrompt = `Investigate alert: ${input.alert_id}
53
+
54
+ Please provide a root cause analysis for this alert, including:
55
+ 1. What triggered the alert
56
+ 2. The root cause of the issue
57
+ 3. Impact assessment
58
+ 4. Recommended remediation steps
59
+ 5. Prevention strategies`;
60
+ await services.sessionService.sendPrompt(sessionUuid, projectUuid, investigationPrompt);
61
+ logger.info('Investigation prompt sent');
62
+ // If wait_for_completion is true, poll for results
63
+ if (input.wait_for_completion) {
64
+ logger.info('Waiting for investigation to complete', {
65
+ maxWaitSeconds: input.max_wait_seconds,
66
+ });
67
+ const maxAttempts = Math.ceil(input.max_wait_seconds / (config.pollIntervalMs / 1000));
68
+ try {
69
+ const completedSession = await services.sessionService.pollForCompletion(sessionUuid, projectUuid, organizationUuid, maxAttempts, config.pollIntervalMs);
70
+ return {
71
+ status: 'completed',
72
+ session_uuid: sessionUuid,
73
+ investigation_results: formatInvestigationResults(completedSession),
74
+ message: `Investigation completed for alert ${input.alert_id}`,
75
+ };
76
+ }
77
+ catch (error) {
78
+ // Timeout or error during polling
79
+ return {
80
+ status: 'in_progress',
81
+ session_uuid: sessionUuid,
82
+ message: `Investigation started but not yet complete. Use hawkeye_get_investigation_status with session_uuid: ${sessionUuid} to check progress.`,
83
+ };
84
+ }
85
+ }
86
+ // Return immediately without waiting
87
+ return {
88
+ status: 'new_investigation',
89
+ session_uuid: sessionUuid,
90
+ message: `New investigation started for alert ${input.alert_id}. Use hawkeye_get_investigation_status with session_uuid: ${sessionUuid} to check progress.`,
91
+ };
92
+ }
93
+ /**
94
+ * Format investigation results from session details
95
+ */
96
+ function formatInvestigationResults(session) {
97
+ return {
98
+ final_answer: session.final_answer,
99
+ chain_of_thoughts: session.chain_of_thoughts || [],
100
+ sources: session.sources || [],
101
+ follow_up_suggestions: generateFollowUpSuggestions(session),
102
+ };
103
+ }
104
+ /**
105
+ * Generate follow-up suggestions based on investigation results
106
+ */
107
+ function generateFollowUpSuggestions(session) {
108
+ const suggestions = [];
109
+ if (session.final_answer) {
110
+ suggestions.push('Can you provide more details about the root cause?');
111
+ suggestions.push('What are the exact steps to remediate this issue?');
112
+ suggestions.push('How can we prevent this from happening again?');
113
+ }
114
+ if (session.chain_of_thoughts && session.chain_of_thoughts.length > 0) {
115
+ suggestions.push('Can you explain the investigation process in more detail?');
116
+ }
117
+ if (session.sources && session.sources.length > 0) {
118
+ suggestions.push('Which logs or metrics were most relevant to this investigation?');
119
+ }
120
+ return suggestions;
121
+ }
122
+ //# sourceMappingURL=investigate-alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"investigate-alert.js","sourceRoot":"","sources":["../../src/tools/investigate-alert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Tool: hawkeye_list_sessions
3
+ * Lists investigation sessions for a project with pagination and date filtering
4
+ */
5
+ import { ToolServices } from './index.js';
6
+ import { z } from 'zod';
7
+ /**
8
+ * Input validation schema
9
+ */
10
+ declare const ListSessionsInputSchema: z.ZodObject<{
11
+ project_uuid: z.ZodOptional<z.ZodString>;
12
+ page: z.ZodOptional<z.ZodNumber>;
13
+ limit: z.ZodOptional<z.ZodNumber>;
14
+ date_from: z.ZodOptional<z.ZodString>;
15
+ date_to: z.ZodOptional<z.ZodString>;
16
+ organization_uuid: z.ZodOptional<z.ZodString>;
17
+ investigation_status: z.ZodOptional<z.ZodString>;
18
+ session_type: z.ZodOptional<z.ZodString>;
19
+ only_uninvestigated: z.ZodOptional<z.ZodBoolean>;
20
+ hide_grouped_incidents: z.ZodOptional<z.ZodBoolean>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ project_uuid?: string | undefined;
23
+ organization_uuid?: string | undefined;
24
+ investigation_status?: string | undefined;
25
+ session_type?: string | undefined;
26
+ limit?: number | undefined;
27
+ page?: number | undefined;
28
+ date_from?: string | undefined;
29
+ date_to?: string | undefined;
30
+ only_uninvestigated?: boolean | undefined;
31
+ hide_grouped_incidents?: boolean | undefined;
32
+ }, {
33
+ project_uuid?: string | undefined;
34
+ organization_uuid?: string | undefined;
35
+ investigation_status?: string | undefined;
36
+ session_type?: string | undefined;
37
+ limit?: number | undefined;
38
+ page?: number | undefined;
39
+ date_from?: string | undefined;
40
+ date_to?: string | undefined;
41
+ only_uninvestigated?: boolean | undefined;
42
+ hide_grouped_incidents?: boolean | undefined;
43
+ }>;
44
+ export type ListSessionsInput = z.infer<typeof ListSessionsInputSchema>;
45
+ /**
46
+ * List sessions with pagination and filtering
47
+ */
48
+ export declare function listSessions(services: ToolServices, args: unknown): Promise<any>;
49
+ export {};
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Tool: hawkeye_list_sessions
3
+ * Lists investigation sessions for a project with pagination and date filtering
4
+ */
5
+ import { getConfig } from '../config/config.js';
6
+ import { logger } from '../utils/logger.js';
7
+ import { z } from 'zod';
8
+ /**
9
+ * Input validation schema
10
+ */
11
+ const ListSessionsInputSchema = z.object({
12
+ project_uuid: z.string().optional(),
13
+ page: z.number().int().positive().optional(),
14
+ limit: z.number().int().positive().max(100).optional(),
15
+ date_from: z.string().optional(),
16
+ date_to: z.string().optional(),
17
+ organization_uuid: z.string().optional(),
18
+ investigation_status: z.string().optional(),
19
+ session_type: z.string().optional(),
20
+ only_uninvestigated: z.boolean().optional(),
21
+ hide_grouped_incidents: z.boolean().optional(),
22
+ });
23
+ /**
24
+ * List sessions with pagination and filtering
25
+ */
26
+ export async function listSessions(services, args) {
27
+ const config = getConfig();
28
+ const input = ListSessionsInputSchema.parse(args);
29
+ logger.info('Listing sessions', {
30
+ projectUuid: input.project_uuid,
31
+ page: input.page,
32
+ limit: input.limit,
33
+ onlyUninvestigated: input.only_uninvestigated,
34
+ });
35
+ // Get project UUID (use default if not provided)
36
+ const projectUuid = input.project_uuid || (await services.projectService.getDefaultProject()).uuid;
37
+ const organizationUuid = input.organization_uuid || config.defaultOrganizationUuid;
38
+ // Handle convenience parameter for uninvestigated incidents
39
+ let investigationStatus = input.investigation_status;
40
+ let sessionType = input.session_type;
41
+ if (input.only_uninvestigated === true) {
42
+ investigationStatus = 'INVESTIGATION_STATUS_NOT_STARTED';
43
+ sessionType = 'SESSION_TYPE_INCIDENT';
44
+ }
45
+ // List sessions with pagination
46
+ const sessions = await services.sessionService.listSessionsWithPagination(projectUuid, organizationUuid, {
47
+ page: input.page,
48
+ limit: input.limit,
49
+ dateFrom: input.date_from,
50
+ dateTo: input.date_to,
51
+ investigationStatus,
52
+ sessionType,
53
+ hideGroupedIncidents: input.hide_grouped_incidents,
54
+ });
55
+ logger.info(`Found ${sessions.length} sessions`);
56
+ return {
57
+ sessions: sessions.map((s) => ({
58
+ session_uuid: s.session_uuid || s.uuid,
59
+ name: s.name,
60
+ create_time: s.create_time || s.created_at,
61
+ last_update: s.last_update || s.updated_at,
62
+ prompt_cycle_count: s.prompt_cycle_ids?.length || s.prompt_cycle_count || 0,
63
+ incident_info: s.incident_info,
64
+ })),
65
+ page: input.page || 1,
66
+ limit: input.limit || 50,
67
+ count: sessions.length,
68
+ project_uuid: projectUuid,
69
+ filters_applied: {
70
+ date_from: input.date_from,
71
+ date_to: input.date_to,
72
+ investigation_status: investigationStatus,
73
+ session_type: sessionType,
74
+ only_uninvestigated: input.only_uninvestigated,
75
+ hide_grouped_incidents: input.hide_grouped_incidents,
76
+ },
77
+ };
78
+ }
79
+ //# sourceMappingURL=list-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-sessions.js","sourceRoot":"","sources":["../../src/tools/list-sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Error type definitions for Hawkeye MCP Server
3
+ */
4
+ export type ErrorType = 'authentication' | 'api' | 'validation' | 'investigation' | 'unknown';
5
+ /**
6
+ * Base error class for Hawkeye MCP errors
7
+ */
8
+ export declare class HawkeyeError extends Error {
9
+ readonly type: ErrorType;
10
+ readonly details?: any;
11
+ readonly recoverySuggestions?: string[];
12
+ constructor(type: ErrorType, message: string, details?: any, recoverySuggestions?: string[]);
13
+ /**
14
+ * Convert to JSON format for MCP tool responses
15
+ */
16
+ toJSON(): {
17
+ error: {
18
+ type: ErrorType;
19
+ message: string;
20
+ details: any;
21
+ recovery_suggestions: string[] | undefined;
22
+ };
23
+ };
24
+ }
25
+ /**
26
+ * Authentication-related errors
27
+ */
28
+ export declare class AuthenticationError extends HawkeyeError {
29
+ constructor(message: string, details?: any, recoverySuggestions?: string[]);
30
+ }
31
+ /**
32
+ * API-related errors (network, HTTP status codes, etc.)
33
+ */
34
+ export declare class ApiError extends HawkeyeError {
35
+ readonly statusCode?: number;
36
+ readonly response?: any;
37
+ constructor(message: string, statusCode?: number, response?: any, recoverySuggestions?: string[]);
38
+ }
39
+ /**
40
+ * Validation errors (invalid inputs, schema violations, etc.)
41
+ */
42
+ export declare class ValidationError extends HawkeyeError {
43
+ constructor(message: string, details?: any, recoverySuggestions?: string[]);
44
+ }
45
+ /**
46
+ * Investigation-related errors (session creation, timeouts, etc.)
47
+ */
48
+ export declare class InvestigationError extends HawkeyeError {
49
+ constructor(message: string, details?: any, recoverySuggestions?: string[]);
50
+ }
51
+ /**
52
+ * Error response format for MCP tools
53
+ */
54
+ export interface ErrorResponse {
55
+ error: {
56
+ type: ErrorType;
57
+ message: string;
58
+ details?: any;
59
+ recovery_suggestions?: string[];
60
+ };
61
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Error type definitions for Hawkeye MCP Server
3
+ */
4
+ /**
5
+ * Base error class for Hawkeye MCP errors
6
+ */
7
+ export class HawkeyeError extends Error {
8
+ type;
9
+ details;
10
+ recoverySuggestions;
11
+ constructor(type, message, details, recoverySuggestions) {
12
+ super(message);
13
+ this.name = 'HawkeyeError';
14
+ this.type = type;
15
+ this.details = details;
16
+ this.recoverySuggestions = recoverySuggestions;
17
+ // Maintain proper stack trace for V8
18
+ if (Error.captureStackTrace) {
19
+ Error.captureStackTrace(this, HawkeyeError);
20
+ }
21
+ }
22
+ /**
23
+ * Convert to JSON format for MCP tool responses
24
+ */
25
+ toJSON() {
26
+ return {
27
+ error: {
28
+ type: this.type,
29
+ message: this.message,
30
+ details: this.details,
31
+ recovery_suggestions: this.recoverySuggestions,
32
+ },
33
+ };
34
+ }
35
+ }
36
+ /**
37
+ * Authentication-related errors
38
+ */
39
+ export class AuthenticationError extends HawkeyeError {
40
+ constructor(message, details, recoverySuggestions) {
41
+ super('authentication', message, details, recoverySuggestions);
42
+ this.name = 'AuthenticationError';
43
+ }
44
+ }
45
+ /**
46
+ * API-related errors (network, HTTP status codes, etc.)
47
+ */
48
+ export class ApiError extends HawkeyeError {
49
+ statusCode;
50
+ response;
51
+ constructor(message, statusCode, response, recoverySuggestions) {
52
+ super('api', message, { statusCode, response }, recoverySuggestions);
53
+ this.name = 'ApiError';
54
+ this.statusCode = statusCode;
55
+ this.response = response;
56
+ }
57
+ }
58
+ /**
59
+ * Validation errors (invalid inputs, schema violations, etc.)
60
+ */
61
+ export class ValidationError extends HawkeyeError {
62
+ constructor(message, details, recoverySuggestions) {
63
+ super('validation', message, details, recoverySuggestions);
64
+ this.name = 'ValidationError';
65
+ }
66
+ }
67
+ /**
68
+ * Investigation-related errors (session creation, timeouts, etc.)
69
+ */
70
+ export class InvestigationError extends HawkeyeError {
71
+ constructor(message, details, recoverySuggestions) {
72
+ super('investigation', message, details, recoverySuggestions);
73
+ this.name = 'InvestigationError';
74
+ }
75
+ }
76
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrB,IAAI,CAAY;IAChB,OAAO,CAAO;IACd,mBAAmB,CAAY;IAE/C,YACE,IAAe,EACf,OAAe,EACf,OAAa,EACb,mBAA8B;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAE/C,qCAAqC;QACrC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,oBAAoB,EAAE,IAAI,CAAC,mBAAmB;aAC/C;SACF,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD,YAAY,OAAe,EAAE,OAAa,EAAE,mBAA8B;QACxE,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,YAAY;IACxB,UAAU,CAAU;IACpB,QAAQ,CAAO;IAE/B,YACE,OAAe,EACf,UAAmB,EACnB,QAAc,EACd,mBAA8B;QAE9B,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,mBAAmB,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC/C,YAAY,OAAe,EAAE,OAAa,EAAE,mBAA8B;QACxE,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IAClD,YAAY,OAAe,EAAE,OAAa,EAAE,mBAA8B;QACxE,KAAK,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}