hawkeye-mcp-server 2.0.8 → 2.0.10
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.
- package/CHANGELOG.md +30 -0
- package/build/index.js +0 -4
- package/build/index.js.map +1 -1
- package/build/tools/apply-session-instruction.d.ts +2 -2
- package/build/tools/create-manual-investigation.js +66 -101
- package/build/tools/create-manual-investigation.js.map +1 -1
- package/build/tools/create-project-instruction.d.ts +2 -2
- package/build/tools/get-status.js +30 -77
- package/build/tools/get-status.js.map +1 -1
- package/build/tools/index.d.ts +0 -2
- package/build/tools/index.js.map +1 -1
- package/build/tools/investigate-alert.js +0 -56
- package/build/tools/investigate-alert.js.map +1 -1
- package/build/tools/validate-instruction.d.ts +2 -2
- package/package.json +1 -1
- package/build/services/investigation-tracker.d.ts +0 -74
- package/build/services/investigation-tracker.js +0 -120
- package/build/services/investigation-tracker.js.map +0 -1
- package/build/services/streaming.service.d.ts +0 -41
- package/build/services/streaming.service.js +0 -124
- package/build/services/streaming.service.js.map +0 -1
- package/build/utils/progress-tracker.d.ts +0 -64
- package/build/utils/progress-tracker.js +0 -228
- package/build/utils/progress-tracker.js.map +0 -1
- package/build/workers/stream-consumer.d.ts +0 -6
- package/build/workers/stream-consumer.js +0 -156
- package/build/workers/stream-consumer.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,36 @@ All notable changes to the Hawkeye MCP Server will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.0.10] - 2025-11-24
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **Simplified investigation architecture**: Removed worker thread approach for manual investigations
|
|
13
|
+
- Removed `StreamingService`, `InvestigationTracker`, and worker thread infrastructure
|
|
14
|
+
- Manual investigations now use fire-and-forget approach with API polling
|
|
15
|
+
- Users should poll with `hawkeye_inspect_session` or `hawkeye_get_chain_of_thought` to monitor progress
|
|
16
|
+
- Simplified codebase, removed memory isolation issues
|
|
17
|
+
- Cleaned build artifacts - package size reduced from 723.3 kB to 680.1 kB
|
|
18
|
+
|
|
19
|
+
### Removed
|
|
20
|
+
|
|
21
|
+
- Worker thread-based streaming for manual investigations
|
|
22
|
+
- `src/services/streaming.service.ts`
|
|
23
|
+
- `src/services/investigation-tracker.ts`
|
|
24
|
+
- `src/workers/stream-consumer.ts`
|
|
25
|
+
- `src/utils/progress-tracker.ts`
|
|
26
|
+
- `stream_progress` parameter from `hawkeye_investigate_alert`
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
|
|
30
|
+
- Investigation progress tracking now queries API directly instead of relying on isolated worker thread memory
|
|
31
|
+
- `hawkeye_get_investigation_status` now properly reflects investigation state from API
|
|
32
|
+
|
|
33
|
+
## [2.0.9] - 2025-11-24
|
|
34
|
+
|
|
35
|
+
### Note
|
|
36
|
+
- Published with stale build artifacts, superseded by 2.0.10
|
|
37
|
+
|
|
8
38
|
## [2.0.8] - 2025-11-23
|
|
9
39
|
|
|
10
40
|
### Fixed
|
package/build/index.js
CHANGED
|
@@ -17,7 +17,6 @@ import { ProjectService } from './services/project.service.js';
|
|
|
17
17
|
import { SessionService } from './services/session.service.js';
|
|
18
18
|
import { ConnectionService } from './services/connection.service.js';
|
|
19
19
|
import { GuidanceService } from './services/guidance.service.js';
|
|
20
|
-
import { StreamingService } from './services/streaming.service.js';
|
|
21
20
|
// Tools
|
|
22
21
|
import { getToolDefinitions } from './tools/index.js';
|
|
23
22
|
/**
|
|
@@ -31,7 +30,6 @@ function initializeServices() {
|
|
|
31
30
|
const sessionService = new SessionService(httpClient, authService);
|
|
32
31
|
const connectionService = new ConnectionService(httpClient, authService);
|
|
33
32
|
const guidanceService = new GuidanceService();
|
|
34
|
-
const streamingService = new StreamingService(httpClient.getAxiosInstance());
|
|
35
33
|
return {
|
|
36
34
|
httpClient,
|
|
37
35
|
authService,
|
|
@@ -39,7 +37,6 @@ function initializeServices() {
|
|
|
39
37
|
sessionService,
|
|
40
38
|
connectionService,
|
|
41
39
|
guidanceService,
|
|
42
|
-
streamingService,
|
|
43
40
|
};
|
|
44
41
|
}
|
|
45
42
|
/**
|
|
@@ -99,7 +96,6 @@ async function main() {
|
|
|
99
96
|
sessionService: services.sessionService,
|
|
100
97
|
connectionService: services.connectionService,
|
|
101
98
|
guidanceService: services.guidanceService,
|
|
102
|
-
streamingService: services.streamingService,
|
|
103
99
|
};
|
|
104
100
|
const result = await handler(toolServices, toolArgs);
|
|
105
101
|
// Return the result
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,oCAAoC,CAAC;AAE5C,8BAA8B;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,WAAW;AACX,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,13 +14,13 @@ declare const ApplySessionInstructionInputSchema: z.ZodObject<{
|
|
|
14
14
|
validate_first: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
15
15
|
}, "strip", z.ZodTypeAny, {
|
|
16
16
|
session_uuid: string;
|
|
17
|
-
content: string;
|
|
18
17
|
type: "INSTRUCTION_TYPE_FILTER" | "INSTRUCTION_TYPE_SYSTEM" | "INSTRUCTION_TYPE_GROUPING" | "INSTRUCTION_TYPE_RCA";
|
|
18
|
+
content: string;
|
|
19
19
|
validate_first: boolean;
|
|
20
20
|
}, {
|
|
21
21
|
session_uuid: string;
|
|
22
|
-
content: string;
|
|
23
22
|
type: "INSTRUCTION_TYPE_FILTER" | "INSTRUCTION_TYPE_SYSTEM" | "INSTRUCTION_TYPE_GROUPING" | "INSTRUCTION_TYPE_RCA";
|
|
23
|
+
content: string;
|
|
24
24
|
validate_first?: boolean | undefined;
|
|
25
25
|
}>;
|
|
26
26
|
export type ApplySessionInstructionInput = z.infer<typeof ApplySessionInstructionInputSchema>;
|
|
@@ -3,14 +3,7 @@
|
|
|
3
3
|
* Creates a new manual investigation from a user-provided prompt
|
|
4
4
|
*/
|
|
5
5
|
import { z } from 'zod';
|
|
6
|
-
import { Worker } from 'worker_threads';
|
|
7
|
-
import { fileURLToPath } from 'url';
|
|
8
|
-
import { dirname, join } from 'path';
|
|
9
6
|
import { logger } from '../utils/logger.js';
|
|
10
|
-
import { investigationTracker } from '../services/investigation-tracker.js';
|
|
11
|
-
import { getConfig } from '../config/config.js';
|
|
12
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
-
const __dirname = dirname(__filename);
|
|
14
7
|
export const CreateManualInvestigationInputSchema = z.object({
|
|
15
8
|
prompt: z.string().min(10, 'Prompt must be at least 10 characters').describe('Detailed investigation prompt including: specific services/resources, time frame, and symptoms/issues observed. Be as specific as possible for best results.'),
|
|
16
9
|
project_uuid: z.string().optional().describe('Optional: project UUID. If not provided, will use default project'),
|
|
@@ -58,8 +51,8 @@ export async function createManualInvestigation(services, args) {
|
|
|
58
51
|
// Ensure we're authenticated
|
|
59
52
|
await services.authService.getAccessToken();
|
|
60
53
|
try {
|
|
61
|
-
logger.info('Creating manual investigation
|
|
62
|
-
// Step 1: Create a new session
|
|
54
|
+
logger.info('Creating manual investigation session...');
|
|
55
|
+
// Step 1: Create a new session
|
|
63
56
|
const requestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
|
|
64
57
|
const gendbSpecUuid = `gendb_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
|
|
65
58
|
const createSessionResponse = await services.httpClient.post('/v1/inference/new_session', {
|
|
@@ -73,134 +66,106 @@ export async function createManualInvestigation(services, args) {
|
|
|
73
66
|
request_id: requestId,
|
|
74
67
|
},
|
|
75
68
|
}, {
|
|
76
|
-
timeout: 10000,
|
|
69
|
+
timeout: 10000,
|
|
77
70
|
});
|
|
78
71
|
const sessionUuid = createSessionResponse.data?.session_uuid || createSessionResponse.data?.uuid;
|
|
79
72
|
if (!sessionUuid) {
|
|
80
73
|
throw new Error('Failed to create session - no session_uuid or uuid in response');
|
|
81
74
|
}
|
|
82
|
-
logger.info(`Session created: ${sessionUuid},
|
|
83
|
-
// Step 2:
|
|
84
|
-
investigationTracker.create(sessionUuid, projectUuid);
|
|
85
|
-
// Step 3: Get auth token for worker
|
|
86
|
-
const authToken = await services.authService.getAccessToken();
|
|
87
|
-
// Step 4: Spawn worker thread to consume the stream
|
|
75
|
+
logger.info(`Session created: ${sessionUuid}, submitting prompt...`);
|
|
76
|
+
// Step 2: Submit the prompt (fire and forget - the API will process it asynchronously)
|
|
88
77
|
const promptRequestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
78
|
+
// Submit the prompt asynchronously (don't await the response)
|
|
79
|
+
services.httpClient.post('/v1/inference/session', {
|
|
80
|
+
action: 'ACTION_NEXT',
|
|
81
|
+
session_uuid: sessionUuid,
|
|
82
|
+
project_uuid: projectUuid,
|
|
83
|
+
messages: [
|
|
84
|
+
{
|
|
85
|
+
content: {
|
|
86
|
+
content_type: 'CONTENT_TYPE_CHAT_PROMPT',
|
|
87
|
+
parts: [input.prompt],
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
request: {
|
|
92
|
+
request_id: promptRequestId,
|
|
99
93
|
},
|
|
94
|
+
prompt_options: {
|
|
95
|
+
disable_replay: false,
|
|
96
|
+
source_focus_categories: [],
|
|
97
|
+
},
|
|
98
|
+
}, {
|
|
99
|
+
timeout: 600000, // 10 minutes
|
|
100
|
+
}).catch(error => {
|
|
101
|
+
logger.error(`Error submitting prompt for session ${sessionUuid}:`, error);
|
|
100
102
|
});
|
|
101
|
-
|
|
102
|
-
worker.on('message', (msg) => {
|
|
103
|
-
if (msg.type === 'status') {
|
|
104
|
-
investigationTracker.updateStatus(sessionUuid, msg.status === 'streaming' ? 'in_progress' : 'starting');
|
|
105
|
-
}
|
|
106
|
-
else if (msg.type === 'progress') {
|
|
107
|
-
investigationTracker.addProgress(sessionUuid, {
|
|
108
|
-
timestamp: new Date(msg.update.timestamp),
|
|
109
|
-
message: msg.update.message,
|
|
110
|
-
type: msg.update.type,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
else if (msg.type === 'completion') {
|
|
114
|
-
investigationTracker.setCompletion(sessionUuid, msg.message);
|
|
115
|
-
}
|
|
116
|
-
else if (msg.type === 'error') {
|
|
117
|
-
investigationTracker.setError(sessionUuid, msg.error);
|
|
118
|
-
logger.error(`Worker error for session ${sessionUuid}:`, msg.error);
|
|
119
|
-
}
|
|
120
|
-
else if (msg.type === 'completed') {
|
|
121
|
-
logger.info(`Stream consumer completed for session ${sessionUuid}`, {
|
|
122
|
-
messageCount: msg.messageCount,
|
|
123
|
-
endTurn: msg.endTurn,
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
worker.on('error', (error) => {
|
|
128
|
-
investigationTracker.setError(sessionUuid, error.message);
|
|
129
|
-
logger.error(`Worker thread error for session ${sessionUuid}:`, error);
|
|
130
|
-
});
|
|
131
|
-
worker.on('exit', (code) => {
|
|
132
|
-
if (code !== 0) {
|
|
133
|
-
logger.warn(`Worker thread exited with code ${code} for session ${sessionUuid}`);
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
logger.info(`Worker spawned for session: ${sessionUuid}`);
|
|
103
|
+
logger.info(`Prompt submitted for session: ${sessionUuid}`);
|
|
137
104
|
// If not waiting for completion, return immediately
|
|
138
105
|
if (!input.wait_for_completion) {
|
|
139
106
|
return {
|
|
140
107
|
session_uuid: sessionUuid,
|
|
141
108
|
status: 'in_progress',
|
|
142
|
-
message: 'Investigation started
|
|
109
|
+
message: 'Investigation started. The investigation is running asynchronously. Investigations typically take 2-5 minutes to complete.',
|
|
143
110
|
next_steps: [
|
|
144
|
-
'Poll for progress using:
|
|
145
|
-
'Check
|
|
111
|
+
'Poll for progress using: hawkeye_get_chain_of_thought with this session_uuid',
|
|
112
|
+
'Check the investigation status with: hawkeye_inspect_session',
|
|
146
113
|
'Once complete, retrieve the full analysis using: hawkeye_get_rca',
|
|
147
114
|
],
|
|
148
115
|
estimated_completion_time: '2-5 minutes',
|
|
149
116
|
polling_instructions: {
|
|
150
|
-
tool: '
|
|
117
|
+
tool: 'hawkeye_inspect_session',
|
|
151
118
|
session_uuid: sessionUuid,
|
|
152
119
|
poll_interval_seconds: 10,
|
|
153
|
-
description: 'Call
|
|
120
|
+
description: 'Call hawkeye_inspect_session every 10-15 seconds to check if status is PROMPT_STATUS_COMPLETED. Then use hawkeye_get_rca to view the full root cause analysis.',
|
|
154
121
|
},
|
|
155
122
|
};
|
|
156
123
|
}
|
|
157
|
-
// Wait for completion by polling the
|
|
124
|
+
// Wait for completion by polling the API
|
|
158
125
|
logger.info(`Waiting for investigation to complete (max ${input.max_wait_seconds}s)...`);
|
|
159
126
|
const startTime = Date.now();
|
|
160
127
|
const maxWaitMs = input.max_wait_seconds * 1000;
|
|
161
|
-
const pollIntervalMs =
|
|
128
|
+
const pollIntervalMs = 10000; // Poll every 10 seconds
|
|
162
129
|
while (Date.now() - startTime < maxWaitMs) {
|
|
163
|
-
const investigation = investigationTracker.get(sessionUuid);
|
|
164
|
-
if (!investigation) {
|
|
165
|
-
throw new Error(`Investigation ${sessionUuid} not found in tracker`);
|
|
166
|
-
}
|
|
167
|
-
// Check if completed or errored
|
|
168
|
-
if (investigation.status === 'completed') {
|
|
169
|
-
logger.info(`Investigation ${sessionUuid} completed, fetching RCA...`);
|
|
170
|
-
// Fetch the RCA
|
|
171
|
-
const rcaResponse = await services.httpClient.get(`/v1/inference/runbook/${sessionUuid}`, {
|
|
172
|
-
params: {
|
|
173
|
-
project_uuid: projectUuid,
|
|
174
|
-
},
|
|
175
|
-
});
|
|
176
|
-
const elapsedSeconds = Math.round((Date.now() - startTime) / 1000);
|
|
177
|
-
return {
|
|
178
|
-
session_uuid: sessionUuid,
|
|
179
|
-
status: 'completed',
|
|
180
|
-
duration_seconds: elapsedSeconds,
|
|
181
|
-
rca: rcaResponse.data,
|
|
182
|
-
message: `Investigation completed successfully in ${elapsedSeconds} seconds.`,
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
if (investigation.status === 'failed') {
|
|
186
|
-
throw new Error(`Investigation failed: ${investigation.error || 'Unknown error'}`);
|
|
187
|
-
}
|
|
188
|
-
// Still in progress, wait before next poll
|
|
189
130
|
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
|
|
131
|
+
// Check session status
|
|
132
|
+
const sessionDetails = await services.sessionService.inspectSession(sessionUuid, projectUuid, 'ORGANIZATION_NAME_ROOT');
|
|
133
|
+
// Check if the prompt cycle is completed
|
|
134
|
+
if (sessionDetails.prompt_cycles && sessionDetails.prompt_cycles.length > 0) {
|
|
135
|
+
const latestCycle = sessionDetails.prompt_cycles[sessionDetails.prompt_cycles.length - 1];
|
|
136
|
+
if (latestCycle.status === 'PROMPT_STATUS_COMPLETED') {
|
|
137
|
+
logger.info(`Investigation ${sessionUuid} completed, fetching RCA...`);
|
|
138
|
+
// Fetch the RCA
|
|
139
|
+
const rcaResponse = await services.httpClient.get(`/v1/inference/runbook/${sessionUuid}`, {
|
|
140
|
+
params: {
|
|
141
|
+
project_uuid: projectUuid,
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
const elapsedSeconds = Math.round((Date.now() - startTime) / 1000);
|
|
145
|
+
return {
|
|
146
|
+
session_uuid: sessionUuid,
|
|
147
|
+
status: 'completed',
|
|
148
|
+
duration_seconds: elapsedSeconds,
|
|
149
|
+
rca: rcaResponse.data,
|
|
150
|
+
message: `Investigation completed successfully in ${elapsedSeconds} seconds.`,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
else if (latestCycle.status === 'PROMPT_STATUS_FAILED') {
|
|
154
|
+
throw new Error(`Investigation failed`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
190
157
|
}
|
|
191
158
|
// Timeout
|
|
192
159
|
const elapsedSeconds = Math.round((Date.now() - startTime) / 1000);
|
|
193
|
-
const investigation = investigationTracker.get(sessionUuid);
|
|
194
160
|
return {
|
|
195
161
|
session_uuid: sessionUuid,
|
|
196
162
|
status: 'timeout',
|
|
197
163
|
duration_seconds: elapsedSeconds,
|
|
198
|
-
message: `Investigation did not complete within ${input.max_wait_seconds} seconds
|
|
199
|
-
progress_updates: investigation?.progress_updates || [],
|
|
164
|
+
message: `Investigation did not complete within ${input.max_wait_seconds} seconds.`,
|
|
200
165
|
next_steps: [
|
|
201
|
-
'Continue polling using:
|
|
202
|
-
'The investigation is still running
|
|
203
|
-
'Once status is
|
|
166
|
+
'Continue polling using: hawkeye_inspect_session',
|
|
167
|
+
'The investigation is still running',
|
|
168
|
+
'Once status is PROMPT_STATUS_COMPLETED, retrieve the RCA using: hawkeye_get_rca',
|
|
204
169
|
],
|
|
205
170
|
};
|
|
206
171
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-manual-investigation.js","sourceRoot":"","sources":["../../src/tools/create-manual-investigation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"create-manual-investigation.js","sourceRoot":"","sources":["../../src/tools/create-manual-investigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,13 +15,13 @@ declare const CreateProjectInstructionInputSchema: z.ZodObject<{
|
|
|
15
15
|
content: z.ZodString;
|
|
16
16
|
}, "strip", z.ZodTypeAny, {
|
|
17
17
|
name: string;
|
|
18
|
-
content: string;
|
|
19
18
|
instruction_type: InstructionType;
|
|
19
|
+
content: string;
|
|
20
20
|
project_uuid?: string | undefined;
|
|
21
21
|
}, {
|
|
22
22
|
name: string;
|
|
23
|
-
content: string;
|
|
24
23
|
instruction_type: InstructionType;
|
|
24
|
+
content: string;
|
|
25
25
|
project_uuid?: string | undefined;
|
|
26
26
|
}>;
|
|
27
27
|
export type CreateProjectInstructionInput = z.infer<typeof CreateProjectInstructionInputSchema>;
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
import { GetInvestigationStatusInputSchema } from '../utils/validation.js';
|
|
6
6
|
import { getConfig } from '../config/config.js';
|
|
7
7
|
import { logger } from '../utils/logger.js';
|
|
8
|
-
import { investigationTracker } from '../services/investigation-tracker.js';
|
|
9
8
|
/**
|
|
10
9
|
* Get investigation status
|
|
11
10
|
*/
|
|
@@ -13,42 +12,6 @@ export async function getInvestigationStatus(services, args) {
|
|
|
13
12
|
const config = getConfig();
|
|
14
13
|
const input = GetInvestigationStatusInputSchema.parse(args);
|
|
15
14
|
logger.info('Getting investigation status', { sessionUuid: input.session_uuid });
|
|
16
|
-
// FIRST: Check if this investigation is being tracked in-memory (from worker thread)
|
|
17
|
-
const trackedState = investigationTracker.get(input.session_uuid);
|
|
18
|
-
if (trackedState) {
|
|
19
|
-
logger.info('Found tracked investigation state', {
|
|
20
|
-
session_uuid: input.session_uuid,
|
|
21
|
-
status: trackedState.status,
|
|
22
|
-
progress_updates: trackedState.progress_updates.length,
|
|
23
|
-
});
|
|
24
|
-
// Return status from tracked state
|
|
25
|
-
const progressPercentage = calculateTrackedProgress(trackedState);
|
|
26
|
-
const currentStep = getTrackedCurrentStep(trackedState);
|
|
27
|
-
// If completed and RCA available, include it
|
|
28
|
-
const investigationResults = trackedState.status === 'completed' && input.include_full_details && trackedState.rca
|
|
29
|
-
? {
|
|
30
|
-
final_answer: trackedState.completion_message || '',
|
|
31
|
-
chain_of_thoughts: [],
|
|
32
|
-
sources: [],
|
|
33
|
-
follow_up_suggestions: [],
|
|
34
|
-
}
|
|
35
|
-
: undefined;
|
|
36
|
-
return {
|
|
37
|
-
session_uuid: input.session_uuid,
|
|
38
|
-
status: trackedState.status === 'starting' || trackedState.status === 'in_progress'
|
|
39
|
-
? 'in_progress'
|
|
40
|
-
: trackedState.status === 'completed'
|
|
41
|
-
? 'completed'
|
|
42
|
-
: 'failed',
|
|
43
|
-
progress_percentage: progressPercentage,
|
|
44
|
-
current_step: currentStep,
|
|
45
|
-
investigation_results: investigationResults,
|
|
46
|
-
created_at: trackedState.started_at.toISOString(),
|
|
47
|
-
updated_at: trackedState.completed_at?.toISOString() || new Date().toISOString(),
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
// FALLBACK: If not tracked, query the API (old behavior)
|
|
51
|
-
logger.info('Investigation not in tracker, querying API', { sessionUuid: input.session_uuid });
|
|
52
15
|
// Get project UUID (use default if not provided)
|
|
53
16
|
const projectUuid = input.project_uuid || (await services.projectService.getDefaultProject()).uuid;
|
|
54
17
|
const organizationUuid = config.defaultOrganizationUuid;
|
|
@@ -74,50 +37,23 @@ export async function getInvestigationStatus(services, args) {
|
|
|
74
37
|
updated_at: sessionDetails.last_update || sessionDetails.updated_at || '',
|
|
75
38
|
};
|
|
76
39
|
}
|
|
77
|
-
/**
|
|
78
|
-
* Calculate progress from tracked state
|
|
79
|
-
*/
|
|
80
|
-
function calculateTrackedProgress(state) {
|
|
81
|
-
if (state.status === 'completed') {
|
|
82
|
-
return 100;
|
|
83
|
-
}
|
|
84
|
-
if (state.status === 'failed') {
|
|
85
|
-
return undefined;
|
|
86
|
-
}
|
|
87
|
-
// Estimate based on progress updates
|
|
88
|
-
const updateCount = state.progress_updates.length;
|
|
89
|
-
if (updateCount === 0) {
|
|
90
|
-
return 5; // Just started
|
|
91
|
-
}
|
|
92
|
-
// Typical investigation has 10-15 progress updates
|
|
93
|
-
const estimatedTotal = 12;
|
|
94
|
-
const progress = Math.min(Math.round((updateCount / estimatedTotal) * 100), 95);
|
|
95
|
-
return progress;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Get current step from tracked state
|
|
99
|
-
*/
|
|
100
|
-
function getTrackedCurrentStep(state) {
|
|
101
|
-
if (state.status === 'completed') {
|
|
102
|
-
return 'Investigation complete';
|
|
103
|
-
}
|
|
104
|
-
if (state.status === 'failed') {
|
|
105
|
-
return `Failed: ${state.error}`;
|
|
106
|
-
}
|
|
107
|
-
if (state.status === 'starting') {
|
|
108
|
-
return 'Starting investigation...';
|
|
109
|
-
}
|
|
110
|
-
// Get the latest progress update
|
|
111
|
-
if (state.progress_updates.length > 0) {
|
|
112
|
-
const latest = state.progress_updates[state.progress_updates.length - 1];
|
|
113
|
-
return humanizeProgressMessage(latest.message);
|
|
114
|
-
}
|
|
115
|
-
return 'Processing...';
|
|
116
|
-
}
|
|
117
40
|
/**
|
|
118
41
|
* Determine investigation status from session details
|
|
119
42
|
*/
|
|
120
43
|
function determineStatus(session) {
|
|
44
|
+
// Check prompt cycle status
|
|
45
|
+
if (session.prompt_cycles && session.prompt_cycles.length > 0) {
|
|
46
|
+
const latestCycle = session.prompt_cycles[session.prompt_cycles.length - 1];
|
|
47
|
+
if (latestCycle.status === 'PROMPT_STATUS_COMPLETED') {
|
|
48
|
+
return 'completed';
|
|
49
|
+
}
|
|
50
|
+
else if (latestCycle.status === 'PROMPT_STATUS_FAILED') {
|
|
51
|
+
return 'failed';
|
|
52
|
+
}
|
|
53
|
+
else if (latestCycle.status === 'PROMPT_STATUS_IN_PROGRESS') {
|
|
54
|
+
return 'in_progress';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
121
57
|
// Check if final_answer is present
|
|
122
58
|
if (session.final_answer) {
|
|
123
59
|
return 'completed';
|
|
@@ -150,6 +86,13 @@ function calculateProgress(session) {
|
|
|
150
86
|
if (session.final_answer) {
|
|
151
87
|
return 100;
|
|
152
88
|
}
|
|
89
|
+
// Check prompt cycle status
|
|
90
|
+
if (session.prompt_cycles && session.prompt_cycles.length > 0) {
|
|
91
|
+
const latestCycle = session.prompt_cycles[session.prompt_cycles.length - 1];
|
|
92
|
+
if (latestCycle.status === 'PROMPT_STATUS_COMPLETED') {
|
|
93
|
+
return 100;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
153
96
|
// If we have chain of thoughts, estimate based on typical investigation length
|
|
154
97
|
if (session.chain_of_thoughts && session.chain_of_thoughts.length > 0) {
|
|
155
98
|
// Typical investigation has 5-10 steps
|
|
@@ -168,6 +111,16 @@ function getCurrentStep(session) {
|
|
|
168
111
|
if (session.final_answer) {
|
|
169
112
|
return 'Investigation complete';
|
|
170
113
|
}
|
|
114
|
+
// Check prompt cycle status
|
|
115
|
+
if (session.prompt_cycles && session.prompt_cycles.length > 0) {
|
|
116
|
+
const latestCycle = session.prompt_cycles[session.prompt_cycles.length - 1];
|
|
117
|
+
if (latestCycle.status === 'PROMPT_STATUS_COMPLETED') {
|
|
118
|
+
return 'Investigation complete';
|
|
119
|
+
}
|
|
120
|
+
else if (latestCycle.status === 'PROMPT_STATUS_FAILED') {
|
|
121
|
+
return 'Investigation failed';
|
|
122
|
+
}
|
|
123
|
+
}
|
|
171
124
|
// Check for latest progress message from prompt_cycle
|
|
172
125
|
if (session.prompt_cycle && session.prompt_cycle.length > 0) {
|
|
173
126
|
const latestCycle = session.prompt_cycle[session.prompt_cycle.length - 1];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-status.js","sourceRoot":"","sources":["../../src/tools/get-status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAG3E,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"get-status.js","sourceRoot":"","sources":["../../src/tools/get-status.ts"],"names":[],"mappings":"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"}
|
package/build/tools/index.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ import { ProjectService } from '../services/project.service.js';
|
|
|
8
8
|
import { SessionService } from '../services/session.service.js';
|
|
9
9
|
import { ConnectionService } from '../services/connection.service.js';
|
|
10
10
|
import { GuidanceService } from '../services/guidance.service.js';
|
|
11
|
-
import { StreamingService } from '../services/streaming.service.js';
|
|
12
11
|
import { HttpClient } from '../utils/http-client.js';
|
|
13
12
|
/**
|
|
14
13
|
* Services required by tool handlers
|
|
@@ -19,7 +18,6 @@ export interface ToolServices {
|
|
|
19
18
|
sessionService: SessionService;
|
|
20
19
|
connectionService: ConnectionService;
|
|
21
20
|
guidanceService: GuidanceService;
|
|
22
|
-
streamingService: StreamingService;
|
|
23
21
|
httpClient: HttpClient;
|
|
24
22
|
}
|
|
25
23
|
/**
|