hawkeye-mcp-server 2.0.5 → 2.0.7
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 +77 -0
- package/build/services/investigation-tracker.d.ts +74 -0
- package/build/services/investigation-tracker.js +120 -0
- package/build/services/investigation-tracker.js.map +1 -0
- package/build/tools/create-manual-investigation.js +61 -25
- package/build/tools/create-manual-investigation.js.map +1 -1
- package/build/tools/get-status.js +77 -0
- package/build/tools/get-status.js.map +1 -1
- package/build/workers/stream-consumer.d.ts +6 -0
- package/build/workers/stream-consumer.js +156 -0
- package/build/workers/stream-consumer.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,83 @@ 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.7] - 2025-11-23
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Enhanced Debug Logging**: Added comprehensive logging throughout worker thread stream consumer
|
|
13
|
+
- Worker lifecycle logs (start, connection, completion)
|
|
14
|
+
- Chunk reception and processing logs
|
|
15
|
+
- Progress update logs with message previews
|
|
16
|
+
- Error logs with full stack traces
|
|
17
|
+
- Session UUID included in all worker log messages for traceability
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- **Improved Debugging**: All worker thread operations now log to stderr for troubleshooting
|
|
22
|
+
- Logs include: Base URL, project UUID, stream connection status
|
|
23
|
+
- Each log prefixed with `[Worker <session_uuid>]` for easy filtering
|
|
24
|
+
- Chunk size and message count tracking
|
|
25
|
+
- Stream end notifications with statistics
|
|
26
|
+
|
|
27
|
+
### Documentation
|
|
28
|
+
|
|
29
|
+
- **Added Claude Code Logging Reference**: New `CLAUDE_CODE_LOGGING.md` document
|
|
30
|
+
- Comprehensive guide to finding and reading Claude Code logs
|
|
31
|
+
- MCP server logging configuration and testing
|
|
32
|
+
- Quick reference commands for log searching
|
|
33
|
+
- Locations of conversation logs and MCP server output
|
|
34
|
+
|
|
35
|
+
## [2.0.6] - 2025-11-23
|
|
36
|
+
|
|
37
|
+
### 🎉 Fixed - Background Stream Processing
|
|
38
|
+
|
|
39
|
+
This release fixes the critical streaming issue where the `/v1/inference/session` API response was not being consumed, causing "stream has been aborted" errors.
|
|
40
|
+
|
|
41
|
+
### Added
|
|
42
|
+
|
|
43
|
+
- **Worker Thread Stream Consumer**: New background worker that consumes streaming responses
|
|
44
|
+
- Created `src/workers/stream-consumer.ts` - Dedicated worker thread for stream consumption
|
|
45
|
+
- Created `src/services/investigation-tracker.ts` - In-memory state tracker for ongoing investigations
|
|
46
|
+
- Worker processes SSE stream data and updates tracker in real-time
|
|
47
|
+
|
|
48
|
+
- **Live Progress Tracking**: Investigations now tracked in-memory with real-time updates
|
|
49
|
+
- `investigationTracker` stores progress updates, status, and completion messages
|
|
50
|
+
- Progress updates available immediately when polling with `hawkeye_get_investigation_status`
|
|
51
|
+
- Tracks: starting → in_progress → completed/failed states
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
|
|
55
|
+
- **`create-manual-investigation` now spawns worker thread**:
|
|
56
|
+
- Creates session via `/v1/inference/new_session`
|
|
57
|
+
- Spawns background worker to consume `/v1/inference/session` stream
|
|
58
|
+
- Returns immediately with session_uuid
|
|
59
|
+
- Worker handles all streaming data asynchronously
|
|
60
|
+
|
|
61
|
+
- **`get-investigation-status` enhanced**:
|
|
62
|
+
- First checks in-memory tracker for live progress
|
|
63
|
+
- Falls back to API query if not tracked
|
|
64
|
+
- Returns progress percentage based on progress update count
|
|
65
|
+
- Shows current step from latest progress message
|
|
66
|
+
|
|
67
|
+
### Technical Details
|
|
68
|
+
|
|
69
|
+
- **Root Cause**: `/v1/inference/session` returns a **stream** of `ProcessPromptResponse` objects
|
|
70
|
+
- **Previous Behavior**: Stream was opened but never consumed, causing connection errors
|
|
71
|
+
- **New Behavior**: Worker thread consumes entire stream in background, updating shared state
|
|
72
|
+
- **Architecture**:
|
|
73
|
+
- Main thread: Returns immediately to MCP client
|
|
74
|
+
- Worker thread: Consumes stream, sends messages back to main thread
|
|
75
|
+
- Shared state: `investigationTracker` Map stores live progress
|
|
76
|
+
- Polling: LLM polls every 10-15 seconds to get latest state
|
|
77
|
+
|
|
78
|
+
### Fixed
|
|
79
|
+
|
|
80
|
+
- ✅ "stream has been aborted" errors when creating manual investigations
|
|
81
|
+
- ✅ Blocking behavior while waiting for stream to complete
|
|
82
|
+
- ✅ No feedback during investigation progress
|
|
83
|
+
- ✅ MCP protocol limitation (no streaming to client) now handled elegantly
|
|
84
|
+
|
|
8
85
|
## [2.0.5] - 2025-11-23
|
|
9
86
|
|
|
10
87
|
### Fixed
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Investigation Tracker Service
|
|
3
|
+
* Manages in-memory state for ongoing/completed investigations
|
|
4
|
+
* Used by worker threads to update progress that can be polled by get-investigation-status
|
|
5
|
+
*/
|
|
6
|
+
export interface InvestigationState {
|
|
7
|
+
session_uuid: string;
|
|
8
|
+
project_uuid: string;
|
|
9
|
+
status: 'starting' | 'in_progress' | 'completed' | 'failed';
|
|
10
|
+
started_at: Date;
|
|
11
|
+
completed_at?: Date;
|
|
12
|
+
progress_updates: ProgressUpdate[];
|
|
13
|
+
completion_message?: string;
|
|
14
|
+
error?: string;
|
|
15
|
+
rca?: any;
|
|
16
|
+
}
|
|
17
|
+
export interface ProgressUpdate {
|
|
18
|
+
timestamp: Date;
|
|
19
|
+
message: string;
|
|
20
|
+
type: 'progress' | 'analysis' | 'completion';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Global in-memory store for investigation states
|
|
24
|
+
* Keyed by session_uuid
|
|
25
|
+
*/
|
|
26
|
+
declare class InvestigationTracker {
|
|
27
|
+
private investigations;
|
|
28
|
+
/**
|
|
29
|
+
* Create a new investigation entry
|
|
30
|
+
*/
|
|
31
|
+
create(session_uuid: string, project_uuid: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Update investigation status
|
|
34
|
+
*/
|
|
35
|
+
updateStatus(session_uuid: string, status: InvestigationState['status']): void;
|
|
36
|
+
/**
|
|
37
|
+
* Add a progress update
|
|
38
|
+
*/
|
|
39
|
+
addProgress(session_uuid: string, update: ProgressUpdate): void;
|
|
40
|
+
/**
|
|
41
|
+
* Set completion message
|
|
42
|
+
*/
|
|
43
|
+
setCompletion(session_uuid: string, message: string): void;
|
|
44
|
+
/**
|
|
45
|
+
* Set error
|
|
46
|
+
*/
|
|
47
|
+
setError(session_uuid: string, error: string): void;
|
|
48
|
+
/**
|
|
49
|
+
* Set RCA data
|
|
50
|
+
*/
|
|
51
|
+
setRCA(session_uuid: string, rca: any): void;
|
|
52
|
+
/**
|
|
53
|
+
* Get investigation state
|
|
54
|
+
*/
|
|
55
|
+
get(session_uuid: string): InvestigationState | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Check if investigation exists
|
|
58
|
+
*/
|
|
59
|
+
has(session_uuid: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Remove investigation from tracker (cleanup)
|
|
62
|
+
*/
|
|
63
|
+
remove(session_uuid: string): void;
|
|
64
|
+
/**
|
|
65
|
+
* Get all active investigations
|
|
66
|
+
*/
|
|
67
|
+
getActive(): InvestigationState[];
|
|
68
|
+
/**
|
|
69
|
+
* Cleanup completed/failed investigations older than TTL
|
|
70
|
+
*/
|
|
71
|
+
cleanup(ttlMs?: number): void;
|
|
72
|
+
}
|
|
73
|
+
export declare const investigationTracker: InvestigationTracker;
|
|
74
|
+
export {};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Investigation Tracker Service
|
|
3
|
+
* Manages in-memory state for ongoing/completed investigations
|
|
4
|
+
* Used by worker threads to update progress that can be polled by get-investigation-status
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Global in-memory store for investigation states
|
|
8
|
+
* Keyed by session_uuid
|
|
9
|
+
*/
|
|
10
|
+
class InvestigationTracker {
|
|
11
|
+
investigations = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Create a new investigation entry
|
|
14
|
+
*/
|
|
15
|
+
create(session_uuid, project_uuid) {
|
|
16
|
+
this.investigations.set(session_uuid, {
|
|
17
|
+
session_uuid,
|
|
18
|
+
project_uuid,
|
|
19
|
+
status: 'starting',
|
|
20
|
+
started_at: new Date(),
|
|
21
|
+
progress_updates: [],
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Update investigation status
|
|
26
|
+
*/
|
|
27
|
+
updateStatus(session_uuid, status) {
|
|
28
|
+
const state = this.investigations.get(session_uuid);
|
|
29
|
+
if (state) {
|
|
30
|
+
state.status = status;
|
|
31
|
+
if (status === 'completed' || status === 'failed') {
|
|
32
|
+
state.completed_at = new Date();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Add a progress update
|
|
38
|
+
*/
|
|
39
|
+
addProgress(session_uuid, update) {
|
|
40
|
+
const state = this.investigations.get(session_uuid);
|
|
41
|
+
if (state) {
|
|
42
|
+
state.progress_updates.push(update);
|
|
43
|
+
// Update status if we got progress
|
|
44
|
+
if (state.status === 'starting') {
|
|
45
|
+
state.status = 'in_progress';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Set completion message
|
|
51
|
+
*/
|
|
52
|
+
setCompletion(session_uuid, message) {
|
|
53
|
+
const state = this.investigations.get(session_uuid);
|
|
54
|
+
if (state) {
|
|
55
|
+
state.completion_message = message;
|
|
56
|
+
state.status = 'completed';
|
|
57
|
+
state.completed_at = new Date();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Set error
|
|
62
|
+
*/
|
|
63
|
+
setError(session_uuid, error) {
|
|
64
|
+
const state = this.investigations.get(session_uuid);
|
|
65
|
+
if (state) {
|
|
66
|
+
state.error = error;
|
|
67
|
+
state.status = 'failed';
|
|
68
|
+
state.completed_at = new Date();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Set RCA data
|
|
73
|
+
*/
|
|
74
|
+
setRCA(session_uuid, rca) {
|
|
75
|
+
const state = this.investigations.get(session_uuid);
|
|
76
|
+
if (state) {
|
|
77
|
+
state.rca = rca;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get investigation state
|
|
82
|
+
*/
|
|
83
|
+
get(session_uuid) {
|
|
84
|
+
return this.investigations.get(session_uuid);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check if investigation exists
|
|
88
|
+
*/
|
|
89
|
+
has(session_uuid) {
|
|
90
|
+
return this.investigations.has(session_uuid);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Remove investigation from tracker (cleanup)
|
|
94
|
+
*/
|
|
95
|
+
remove(session_uuid) {
|
|
96
|
+
this.investigations.delete(session_uuid);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get all active investigations
|
|
100
|
+
*/
|
|
101
|
+
getActive() {
|
|
102
|
+
return Array.from(this.investigations.values()).filter((inv) => inv.status === 'starting' || inv.status === 'in_progress');
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Cleanup completed/failed investigations older than TTL
|
|
106
|
+
*/
|
|
107
|
+
cleanup(ttlMs = 3600000) {
|
|
108
|
+
const now = Date.now();
|
|
109
|
+
for (const [uuid, state] of this.investigations.entries()) {
|
|
110
|
+
if ((state.status === 'completed' || state.status === 'failed') &&
|
|
111
|
+
state.completed_at &&
|
|
112
|
+
now - state.completed_at.getTime() > ttlMs) {
|
|
113
|
+
this.investigations.delete(uuid);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Global singleton instance
|
|
119
|
+
export const investigationTracker = new InvestigationTracker();
|
|
120
|
+
//# sourceMappingURL=investigation-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"investigation-tracker.js","sourceRoot":"","sources":["../../src/services/investigation-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,14 @@
|
|
|
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';
|
|
6
9
|
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);
|
|
7
14
|
export const CreateManualInvestigationInputSchema = z.object({
|
|
8
15
|
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.'),
|
|
9
16
|
project_uuid: z.string().optional().describe('Optional: project UUID. If not provided, will use default project'),
|
|
@@ -49,7 +56,7 @@ export async function createManualInvestigation(services, args) {
|
|
|
49
56
|
// Ensure we're authenticated
|
|
50
57
|
await services.authService.getAccessToken();
|
|
51
58
|
try {
|
|
52
|
-
logger.info('Creating manual investigation
|
|
59
|
+
logger.info('Creating manual investigation with background stream consumer...');
|
|
53
60
|
// Step 1: Create a new session (returns immediately)
|
|
54
61
|
const requestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
|
|
55
62
|
const gendbSpecUuid = `gendb_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
|
|
@@ -70,37 +77,66 @@ export async function createManualInvestigation(services, args) {
|
|
|
70
77
|
if (!sessionUuid) {
|
|
71
78
|
throw new Error('Failed to create session - no session_uuid or uuid in response');
|
|
72
79
|
}
|
|
73
|
-
logger.info(`Session created: ${sessionUuid},
|
|
74
|
-
// Step 2:
|
|
80
|
+
logger.info(`Session created: ${sessionUuid}, spawning stream consumer worker...`);
|
|
81
|
+
// Step 2: Register investigation in tracker
|
|
82
|
+
investigationTracker.create(sessionUuid, projectUuid);
|
|
83
|
+
// Step 3: Get auth token for worker
|
|
84
|
+
const authToken = await services.authService.getAccessToken();
|
|
85
|
+
// Step 4: Spawn worker thread to consume the stream
|
|
75
86
|
const promptRequestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
},
|
|
87
|
-
],
|
|
88
|
-
request: {
|
|
89
|
-
request_id: promptRequestId,
|
|
90
|
-
},
|
|
91
|
-
prompt_options: {
|
|
92
|
-
disable_replay: false,
|
|
93
|
-
source_focus_categories: [],
|
|
87
|
+
const workerPath = join(__dirname, '../workers/stream-consumer.js');
|
|
88
|
+
const config = getConfig();
|
|
89
|
+
const worker = new Worker(workerPath, {
|
|
90
|
+
workerData: {
|
|
91
|
+
baseUrl: config.baseUrl,
|
|
92
|
+
authToken,
|
|
93
|
+
sessionUuid,
|
|
94
|
+
projectUuid,
|
|
95
|
+
prompt: input.prompt,
|
|
96
|
+
requestId: promptRequestId,
|
|
94
97
|
},
|
|
95
|
-
}, {
|
|
96
|
-
timeout: 5000, // Just needs to submit the prompt, not wait for completion
|
|
97
98
|
});
|
|
98
|
-
|
|
99
|
+
// Listen to worker messages and update tracker
|
|
100
|
+
worker.on('message', (msg) => {
|
|
101
|
+
if (msg.type === 'status') {
|
|
102
|
+
investigationTracker.updateStatus(sessionUuid, msg.status === 'streaming' ? 'in_progress' : 'starting');
|
|
103
|
+
}
|
|
104
|
+
else if (msg.type === 'progress') {
|
|
105
|
+
investigationTracker.addProgress(sessionUuid, {
|
|
106
|
+
timestamp: new Date(msg.update.timestamp),
|
|
107
|
+
message: msg.update.message,
|
|
108
|
+
type: msg.update.type,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
else if (msg.type === 'completion') {
|
|
112
|
+
investigationTracker.setCompletion(sessionUuid, msg.message);
|
|
113
|
+
}
|
|
114
|
+
else if (msg.type === 'error') {
|
|
115
|
+
investigationTracker.setError(sessionUuid, msg.error);
|
|
116
|
+
logger.error(`Worker error for session ${sessionUuid}:`, msg.error);
|
|
117
|
+
}
|
|
118
|
+
else if (msg.type === 'completed') {
|
|
119
|
+
logger.info(`Stream consumer completed for session ${sessionUuid}`, {
|
|
120
|
+
messageCount: msg.messageCount,
|
|
121
|
+
endTurn: msg.endTurn,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
worker.on('error', (error) => {
|
|
126
|
+
investigationTracker.setError(sessionUuid, error.message);
|
|
127
|
+
logger.error(`Worker thread error for session ${sessionUuid}:`, error);
|
|
128
|
+
});
|
|
129
|
+
worker.on('exit', (code) => {
|
|
130
|
+
if (code !== 0) {
|
|
131
|
+
logger.warn(`Worker thread exited with code ${code} for session ${sessionUuid}`);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
logger.info(`Worker spawned for session: ${sessionUuid}`);
|
|
99
135
|
// Always return immediately
|
|
100
136
|
return {
|
|
101
137
|
session_uuid: sessionUuid,
|
|
102
138
|
status: 'in_progress',
|
|
103
|
-
message: 'Investigation started in the background. Investigations typically take 2-5 minutes to complete.',
|
|
139
|
+
message: 'Investigation started in the background. Stream is being consumed by a worker thread. Investigations typically take 2-5 minutes to complete.',
|
|
104
140
|
next_steps: [
|
|
105
141
|
'Poll for progress using: hawkeye_get_investigation_status with this session_uuid',
|
|
106
142
|
'Check every 10-15 seconds until status is "completed"',
|
|
@@ -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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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
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';
|
|
8
9
|
/**
|
|
9
10
|
* Get investigation status
|
|
10
11
|
*/
|
|
@@ -12,6 +13,42 @@ export async function getInvestigationStatus(services, args) {
|
|
|
12
13
|
const config = getConfig();
|
|
13
14
|
const input = GetInvestigationStatusInputSchema.parse(args);
|
|
14
15
|
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 });
|
|
15
52
|
// Get project UUID (use default if not provided)
|
|
16
53
|
const projectUuid = input.project_uuid || (await services.projectService.getDefaultProject()).uuid;
|
|
17
54
|
const organizationUuid = config.defaultOrganizationUuid;
|
|
@@ -37,6 +74,46 @@ export async function getInvestigationStatus(services, args) {
|
|
|
37
74
|
updated_at: sessionDetails.last_update || sessionDetails.updated_at || '',
|
|
38
75
|
};
|
|
39
76
|
}
|
|
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
|
+
}
|
|
40
117
|
/**
|
|
41
118
|
* Determine investigation status from session details
|
|
42
119
|
*/
|
|
@@ -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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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker Thread: Stream Consumer
|
|
3
|
+
* Consumes the streaming response from /v1/inference/session
|
|
4
|
+
* Updates the investigation tracker as progress comes in
|
|
5
|
+
*/
|
|
6
|
+
import { parentPort, workerData } from 'worker_threads';
|
|
7
|
+
import axios from 'axios';
|
|
8
|
+
const data = workerData;
|
|
9
|
+
async function consumeStream() {
|
|
10
|
+
try {
|
|
11
|
+
console.error(`[Worker ${data.sessionUuid}] Starting stream consumer`);
|
|
12
|
+
console.error(`[Worker ${data.sessionUuid}] Base URL: ${data.baseUrl}`);
|
|
13
|
+
console.error(`[Worker ${data.sessionUuid}] Project: ${data.projectUuid}`);
|
|
14
|
+
// Notify parent that we're starting
|
|
15
|
+
parentPort?.postMessage({ type: 'status', status: 'starting' });
|
|
16
|
+
const client = axios.create({
|
|
17
|
+
baseURL: data.baseUrl,
|
|
18
|
+
headers: {
|
|
19
|
+
Authorization: `Bearer ${data.authToken}`,
|
|
20
|
+
'Content-Type': 'application/json',
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
console.error(`[Worker ${data.sessionUuid}] Posting to /v1/inference/session`);
|
|
24
|
+
const response = await client.post('/v1/inference/session', {
|
|
25
|
+
action: 'ACTION_NEXT',
|
|
26
|
+
session_uuid: data.sessionUuid,
|
|
27
|
+
project_uuid: data.projectUuid,
|
|
28
|
+
messages: [
|
|
29
|
+
{
|
|
30
|
+
content: {
|
|
31
|
+
content_type: 'CONTENT_TYPE_CHAT_PROMPT',
|
|
32
|
+
parts: [data.prompt],
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
request: {
|
|
37
|
+
request_id: data.requestId,
|
|
38
|
+
},
|
|
39
|
+
prompt_options: {
|
|
40
|
+
disable_replay: false,
|
|
41
|
+
source_focus_categories: [],
|
|
42
|
+
},
|
|
43
|
+
}, {
|
|
44
|
+
responseType: 'stream',
|
|
45
|
+
timeout: 600000, // 10 minutes
|
|
46
|
+
});
|
|
47
|
+
console.error(`[Worker ${data.sessionUuid}] Stream connected, starting to consume`);
|
|
48
|
+
parentPort?.postMessage({ type: 'status', status: 'streaming' });
|
|
49
|
+
let buffer = '';
|
|
50
|
+
let messageCount = 0;
|
|
51
|
+
let endTurn = false;
|
|
52
|
+
// Process stream chunks
|
|
53
|
+
response.data.on('data', (chunk) => {
|
|
54
|
+
console.error(`[Worker ${data.sessionUuid}] Received chunk of ${chunk.length} bytes`);
|
|
55
|
+
const chunkStr = chunk.toString();
|
|
56
|
+
buffer += chunkStr;
|
|
57
|
+
// Split by newlines
|
|
58
|
+
const lines = buffer.split('\n');
|
|
59
|
+
buffer = lines.pop() || ''; // Keep incomplete line in buffer
|
|
60
|
+
for (let line of lines) {
|
|
61
|
+
if (!line.trim())
|
|
62
|
+
continue;
|
|
63
|
+
// Handle SSE format: "data: {...}"
|
|
64
|
+
if (line.startsWith('data: ')) {
|
|
65
|
+
line = line.substring(6);
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const message = JSON.parse(line);
|
|
69
|
+
messageCount++;
|
|
70
|
+
if (message.message?.content) {
|
|
71
|
+
const contentType = message.message.content.content_type;
|
|
72
|
+
const parts = message.message.content.parts || [];
|
|
73
|
+
// Send progress update to parent
|
|
74
|
+
if (contentType === 'CONTENT_TYPE_PROGRESS_STATUS' && parts.length > 0) {
|
|
75
|
+
console.error(`[Worker ${data.sessionUuid}] Progress: ${parts[0].substring(0, 100)}`);
|
|
76
|
+
parentPort?.postMessage({
|
|
77
|
+
type: 'progress',
|
|
78
|
+
update: {
|
|
79
|
+
timestamp: new Date().toISOString(),
|
|
80
|
+
message: parts[0],
|
|
81
|
+
type: 'progress',
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
else if (contentType === 'CONTENT_TYPE_INTERIM_ANALYSIS' && parts.length > 0) {
|
|
86
|
+
console.error(`[Worker ${data.sessionUuid}] Analysis update received`);
|
|
87
|
+
parentPort?.postMessage({
|
|
88
|
+
type: 'progress',
|
|
89
|
+
update: {
|
|
90
|
+
timestamp: new Date().toISOString(),
|
|
91
|
+
message: parts[0],
|
|
92
|
+
type: 'analysis',
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
else if (contentType === 'CONTENT_TYPE_CHAT_COMPLETION' && parts.length > 0) {
|
|
97
|
+
console.error(`[Worker ${data.sessionUuid}] Completion received`);
|
|
98
|
+
parentPort?.postMessage({
|
|
99
|
+
type: 'completion',
|
|
100
|
+
message: parts[0],
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
// Check for end turn
|
|
104
|
+
if (message.message.end_turn) {
|
|
105
|
+
endTurn = true;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Check for errors
|
|
109
|
+
if (message.message?.status && message.message.status.code !== 0) {
|
|
110
|
+
parentPort?.postMessage({
|
|
111
|
+
type: 'error',
|
|
112
|
+
error: message.message.status.message || 'Unknown error',
|
|
113
|
+
hint: message.message.status.hint,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
// Skip invalid JSON
|
|
119
|
+
if (line.length > 0 && line !== '{}') {
|
|
120
|
+
console.error('[Worker] Skipping invalid JSON:', line.substring(0, 100));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
response.data.on('end', () => {
|
|
126
|
+
console.error(`[Worker ${data.sessionUuid}] Stream ended. Messages: ${messageCount}, EndTurn: ${endTurn}`);
|
|
127
|
+
parentPort?.postMessage({
|
|
128
|
+
type: 'completed',
|
|
129
|
+
messageCount,
|
|
130
|
+
endTurn,
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
response.data.on('error', (error) => {
|
|
134
|
+
parentPort?.postMessage({
|
|
135
|
+
type: 'error',
|
|
136
|
+
error: error.message,
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
console.error(`[Worker ${data.sessionUuid}] ERROR:`, error.message || String(error));
|
|
142
|
+
console.error(`[Worker ${data.sessionUuid}] Stack:`, error.stack);
|
|
143
|
+
parentPort?.postMessage({
|
|
144
|
+
type: 'error',
|
|
145
|
+
error: error.message || String(error),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Start consuming the stream
|
|
150
|
+
consumeStream().catch((error) => {
|
|
151
|
+
parentPort?.postMessage({
|
|
152
|
+
type: 'error',
|
|
153
|
+
error: error.message || String(error),
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=stream-consumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-consumer.js","sourceRoot":"","sources":["../../src/workers/stream-consumer.ts"],"names":[],"mappings":"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"}
|