@trentapps/manager-protocol 1.1.1
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/LICENSE +21 -0
- package/README.md +446 -0
- package/dist/analyzers/ArchitectureDetector.d.ts +44 -0
- package/dist/analyzers/ArchitectureDetector.d.ts.map +1 -0
- package/dist/analyzers/ArchitectureDetector.js +218 -0
- package/dist/analyzers/ArchitectureDetector.js.map +1 -0
- package/dist/analyzers/CSSAnalyzer.d.ts +104 -0
- package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/CSSAnalyzer.js +578 -0
- package/dist/analyzers/CSSAnalyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +5 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +5 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +174 -0
- package/dist/cli.js.map +1 -0
- package/dist/design-system/index.d.ts +6 -0
- package/dist/design-system/index.d.ts.map +1 -0
- package/dist/design-system/index.js +6 -0
- package/dist/design-system/index.js.map +1 -0
- package/dist/design-system/tokens.d.ts +106 -0
- package/dist/design-system/tokens.d.ts.map +1 -0
- package/dist/design-system/tokens.js +554 -0
- package/dist/design-system/tokens.js.map +1 -0
- package/dist/engine/AppMonitor.d.ts +162 -0
- package/dist/engine/AppMonitor.d.ts.map +1 -0
- package/dist/engine/AppMonitor.js +754 -0
- package/dist/engine/AppMonitor.js.map +1 -0
- package/dist/engine/AuditLogger.d.ts +138 -0
- package/dist/engine/AuditLogger.d.ts.map +1 -0
- package/dist/engine/AuditLogger.js +448 -0
- package/dist/engine/AuditLogger.js.map +1 -0
- package/dist/engine/GitHubApprovalManager.d.ts +106 -0
- package/dist/engine/GitHubApprovalManager.d.ts.map +1 -0
- package/dist/engine/GitHubApprovalManager.js +315 -0
- package/dist/engine/GitHubApprovalManager.js.map +1 -0
- package/dist/engine/RateLimiter.d.ts +79 -0
- package/dist/engine/RateLimiter.d.ts.map +1 -0
- package/dist/engine/RateLimiter.js +232 -0
- package/dist/engine/RateLimiter.js.map +1 -0
- package/dist/engine/RulesEngine.d.ts +77 -0
- package/dist/engine/RulesEngine.d.ts.map +1 -0
- package/dist/engine/RulesEngine.js +400 -0
- package/dist/engine/RulesEngine.js.map +1 -0
- package/dist/engine/TaskManager.d.ts +173 -0
- package/dist/engine/TaskManager.d.ts.map +1 -0
- package/dist/engine/TaskManager.js +678 -0
- package/dist/engine/TaskManager.js.map +1 -0
- package/dist/engine/index.d.ts +9 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +9 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/architecture.d.ts +9 -0
- package/dist/rules/architecture.d.ts.map +1 -0
- package/dist/rules/architecture.js +322 -0
- package/dist/rules/architecture.js.map +1 -0
- package/dist/rules/azure.d.ts +7 -0
- package/dist/rules/azure.d.ts.map +1 -0
- package/dist/rules/azure.js +138 -0
- package/dist/rules/azure.js.map +1 -0
- package/dist/rules/compliance.d.ts +9 -0
- package/dist/rules/compliance.d.ts.map +1 -0
- package/dist/rules/compliance.js +304 -0
- package/dist/rules/compliance.js.map +1 -0
- package/dist/rules/css.d.ts +10 -0
- package/dist/rules/css.d.ts.map +1 -0
- package/dist/rules/css.js +1239 -0
- package/dist/rules/css.js.map +1 -0
- package/dist/rules/flask.d.ts +7 -0
- package/dist/rules/flask.d.ts.map +1 -0
- package/dist/rules/flask.js +155 -0
- package/dist/rules/flask.js.map +1 -0
- package/dist/rules/index.d.ts +607 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +401 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/ml-ai.d.ts +7 -0
- package/dist/rules/ml-ai.d.ts.map +1 -0
- package/dist/rules/ml-ai.js +150 -0
- package/dist/rules/ml-ai.js.map +1 -0
- package/dist/rules/operational.d.ts +9 -0
- package/dist/rules/operational.d.ts.map +1 -0
- package/dist/rules/operational.js +318 -0
- package/dist/rules/operational.js.map +1 -0
- package/dist/rules/security.d.ts +9 -0
- package/dist/rules/security.d.ts.map +1 -0
- package/dist/rules/security.js +287 -0
- package/dist/rules/security.js.map +1 -0
- package/dist/rules/storage.d.ts +7 -0
- package/dist/rules/storage.d.ts.map +1 -0
- package/dist/rules/storage.js +134 -0
- package/dist/rules/storage.js.map +1 -0
- package/dist/rules/stripe.d.ts +7 -0
- package/dist/rules/stripe.d.ts.map +1 -0
- package/dist/rules/stripe.js +140 -0
- package/dist/rules/stripe.js.map +1 -0
- package/dist/rules/testing.d.ts +7 -0
- package/dist/rules/testing.d.ts.map +1 -0
- package/dist/rules/testing.js +135 -0
- package/dist/rules/testing.js.map +1 -0
- package/dist/rules/ux.d.ts +9 -0
- package/dist/rules/ux.d.ts.map +1 -0
- package/dist/rules/ux.js +280 -0
- package/dist/rules/ux.js.map +1 -0
- package/dist/rules/websocket.d.ts +7 -0
- package/dist/rules/websocket.d.ts.map +1 -0
- package/dist/rules/websocket.js +136 -0
- package/dist/rules/websocket.js.map +1 -0
- package/dist/server.d.ts +49 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +2330 -0
- package/dist/server.js.map +1 -0
- package/dist/supervisor/AgentSupervisor.d.ts +235 -0
- package/dist/supervisor/AgentSupervisor.d.ts.map +1 -0
- package/dist/supervisor/AgentSupervisor.js +596 -0
- package/dist/supervisor/AgentSupervisor.js.map +1 -0
- package/dist/supervisor/ManagedServerRegistry.d.ts +48 -0
- package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -0
- package/dist/supervisor/ManagedServerRegistry.js +145 -0
- package/dist/supervisor/ManagedServerRegistry.js.map +1 -0
- package/dist/supervisor/ProjectTracker.d.ts +188 -0
- package/dist/supervisor/ProjectTracker.d.ts.map +1 -0
- package/dist/supervisor/ProjectTracker.js +617 -0
- package/dist/supervisor/ProjectTracker.js.map +1 -0
- package/dist/supervisor/index.d.ts +6 -0
- package/dist/supervisor/index.d.ts.map +1 -0
- package/dist/supervisor/index.js +6 -0
- package/dist/supervisor/index.js.map +1 -0
- package/dist/types/index.d.ts +1176 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +391 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/errors.d.ts +86 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +171 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/shell.d.ts +22 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +29 -0
- package/dist/utils/shell.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,617 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Tracker - Tracks agent activity across projects
|
|
3
|
+
*
|
|
4
|
+
* This system monitors:
|
|
5
|
+
* - Which agents are working in which projects
|
|
6
|
+
* - Real-time agent activity logs per project
|
|
7
|
+
* - Project metadata (git info, path, status)
|
|
8
|
+
* - Historical activity and statistics
|
|
9
|
+
*/
|
|
10
|
+
import { exec } from 'child_process';
|
|
11
|
+
import { promisify } from 'util';
|
|
12
|
+
import path from 'path';
|
|
13
|
+
import fs from 'fs';
|
|
14
|
+
const execAsync = promisify(exec);
|
|
15
|
+
class ProjectTracker {
|
|
16
|
+
projects = new Map();
|
|
17
|
+
agents = new Map();
|
|
18
|
+
activityLog = new Map(); // projectId -> activities
|
|
19
|
+
agentActivityIndex = new Map(); // agentId -> activities (performance index)
|
|
20
|
+
agentToProject = new Map(); // agentId -> projectId
|
|
21
|
+
// Configuration
|
|
22
|
+
maxActivitiesPerProject = 1000;
|
|
23
|
+
activityRetentionMs = 24 * 60 * 60 * 1000; // 24 hours
|
|
24
|
+
agentIdleTimeoutMs = 5 * 60 * 1000; // 5 minutes of inactivity = idle
|
|
25
|
+
agentDisconnectTimeoutMs = 30 * 60 * 1000; // 30 minutes = disconnected
|
|
26
|
+
/**
|
|
27
|
+
* Register or update a project
|
|
28
|
+
*/
|
|
29
|
+
async registerProject(projectPath) {
|
|
30
|
+
const projectId = this.getProjectId(projectPath);
|
|
31
|
+
let project = this.projects.get(projectId);
|
|
32
|
+
if (!project) {
|
|
33
|
+
project = await this.createProjectInfo(projectPath);
|
|
34
|
+
this.projects.set(projectId, project);
|
|
35
|
+
this.activityLog.set(projectId, []);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Update git info
|
|
39
|
+
await this.updateGitInfo(project, projectPath);
|
|
40
|
+
}
|
|
41
|
+
return project;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Record agent activity in a project
|
|
45
|
+
* NO LONGER auto-creates agent entries - use registerSession() explicitly
|
|
46
|
+
*/
|
|
47
|
+
recordActivity(projectPath, agentId, sessionId, activity) {
|
|
48
|
+
const projectId = this.getProjectId(projectPath);
|
|
49
|
+
// Ensure project exists
|
|
50
|
+
if (!this.projects.has(projectId)) {
|
|
51
|
+
// Auto-register project
|
|
52
|
+
this.registerProject(projectPath).catch(console.error);
|
|
53
|
+
}
|
|
54
|
+
// Record activity
|
|
55
|
+
const fullActivity = {
|
|
56
|
+
agentId,
|
|
57
|
+
sessionId,
|
|
58
|
+
timestamp: new Date().toISOString(),
|
|
59
|
+
...activity
|
|
60
|
+
};
|
|
61
|
+
const activities = this.activityLog.get(projectId) || [];
|
|
62
|
+
activities.unshift(fullActivity); // Add to beginning
|
|
63
|
+
// Trim old activities
|
|
64
|
+
if (activities.length > this.maxActivitiesPerProject) {
|
|
65
|
+
activities.splice(this.maxActivitiesPerProject);
|
|
66
|
+
}
|
|
67
|
+
this.activityLog.set(projectId, activities);
|
|
68
|
+
// Update agent activity index for efficient agent-based queries
|
|
69
|
+
const agentActivities = this.agentActivityIndex.get(agentId) || [];
|
|
70
|
+
agentActivities.unshift(fullActivity);
|
|
71
|
+
if (agentActivities.length > this.maxActivitiesPerProject) {
|
|
72
|
+
agentActivities.splice(this.maxActivitiesPerProject);
|
|
73
|
+
}
|
|
74
|
+
this.agentActivityIndex.set(agentId, agentActivities);
|
|
75
|
+
// Update project stats
|
|
76
|
+
this.updateProjectStats(projectId);
|
|
77
|
+
// Only update agent if it's already registered
|
|
78
|
+
if (this.agents.has(agentId)) {
|
|
79
|
+
this.updateAgentInfo(agentId, sessionId, projectPath);
|
|
80
|
+
this.agentToProject.set(agentId, projectId);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Explicitly register a session/agent working on a project
|
|
85
|
+
* Must be called by services or Claude instances to appear in agent list
|
|
86
|
+
*/
|
|
87
|
+
registerSession(params) {
|
|
88
|
+
const projectId = this.getProjectId(params.projectPath);
|
|
89
|
+
// Ensure project exists
|
|
90
|
+
if (!this.projects.has(projectId)) {
|
|
91
|
+
this.registerProject(params.projectPath).catch(console.error);
|
|
92
|
+
}
|
|
93
|
+
let agent = this.agents.get(params.agentId);
|
|
94
|
+
if (!agent) {
|
|
95
|
+
agent = {
|
|
96
|
+
agentId: params.agentId,
|
|
97
|
+
sessionId: params.sessionId,
|
|
98
|
+
currentProject: projectId,
|
|
99
|
+
startTime: new Date().toISOString(),
|
|
100
|
+
lastActivity: new Date().toISOString(),
|
|
101
|
+
actionsCount: 0,
|
|
102
|
+
status: 'active',
|
|
103
|
+
...(params.agentType && { type: params.agentType }),
|
|
104
|
+
...(params.metadata && { metadata: params.metadata })
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
agent.currentProject = projectId;
|
|
109
|
+
agent.lastActivity = new Date().toISOString();
|
|
110
|
+
agent.status = 'active';
|
|
111
|
+
if (params.metadata) {
|
|
112
|
+
agent.metadata = { ...agent.metadata, ...params.metadata };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
this.agents.set(params.agentId, agent);
|
|
116
|
+
this.agentToProject.set(params.agentId, projectId);
|
|
117
|
+
return agent;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Explicitly unregister/complete a session
|
|
121
|
+
*/
|
|
122
|
+
completeSession(agentId, outcome) {
|
|
123
|
+
const agent = this.agents.get(agentId);
|
|
124
|
+
if (agent) {
|
|
125
|
+
agent.status = 'disconnected';
|
|
126
|
+
agent.completedAt = new Date().toISOString();
|
|
127
|
+
if (outcome) {
|
|
128
|
+
agent.outcome = outcome;
|
|
129
|
+
}
|
|
130
|
+
this.agents.set(agentId, agent);
|
|
131
|
+
// Will be cleaned up by cleanupStaleAgents after retention period
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get all projects
|
|
136
|
+
*/
|
|
137
|
+
getProjects() {
|
|
138
|
+
return Array.from(this.projects.values())
|
|
139
|
+
.sort((a, b) => {
|
|
140
|
+
// Sort by last activity, most recent first
|
|
141
|
+
if (!a.lastActivity && !b.lastActivity)
|
|
142
|
+
return 0;
|
|
143
|
+
if (!a.lastActivity)
|
|
144
|
+
return 1;
|
|
145
|
+
if (!b.lastActivity)
|
|
146
|
+
return -1;
|
|
147
|
+
return new Date(b.lastActivity).getTime() - new Date(a.lastActivity).getTime();
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get project by ID or path
|
|
152
|
+
*/
|
|
153
|
+
getProject(idOrPath) {
|
|
154
|
+
const projectId = idOrPath.startsWith('/') ? this.getProjectId(idOrPath) : idOrPath;
|
|
155
|
+
return this.projects.get(projectId);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get project activities
|
|
159
|
+
*/
|
|
160
|
+
getProjectActivities(projectId, limit = 100) {
|
|
161
|
+
const activities = this.activityLog.get(projectId) || [];
|
|
162
|
+
return activities.slice(0, limit);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get agent activities efficiently (uses index, no N+1 queries)
|
|
166
|
+
*/
|
|
167
|
+
getAgentActivities(agentId, limit = 100) {
|
|
168
|
+
const activities = this.agentActivityIndex.get(agentId) || [];
|
|
169
|
+
return activities.slice(0, limit);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get recent activities across all projects efficiently
|
|
173
|
+
* Uses k-way merge for optimal performance (O(n log k) where n=limit, k=projects)
|
|
174
|
+
* Avoids fetching and sorting thousands of activities when only need a few
|
|
175
|
+
*/
|
|
176
|
+
getAllRecentActivities(limit = 50) {
|
|
177
|
+
// Create iterators for each project's activity log
|
|
178
|
+
const projectIterators = [];
|
|
179
|
+
for (const [projectId, activities] of this.activityLog.entries()) {
|
|
180
|
+
if (activities.length > 0) {
|
|
181
|
+
const project = this.projects.get(projectId);
|
|
182
|
+
projectIterators.push({
|
|
183
|
+
projectId,
|
|
184
|
+
projectName: project?.name || projectId,
|
|
185
|
+
activities,
|
|
186
|
+
index: 0
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// K-way merge using a simple approach
|
|
191
|
+
const result = [];
|
|
192
|
+
while (result.length < limit && projectIterators.length > 0) {
|
|
193
|
+
// Find the iterator with the most recent activity
|
|
194
|
+
let maxTimestamp = 0;
|
|
195
|
+
let maxIteratorIndex = -1;
|
|
196
|
+
for (let i = 0; i < projectIterators.length; i++) {
|
|
197
|
+
const iterator = projectIterators[i];
|
|
198
|
+
if (iterator.index < iterator.activities.length) {
|
|
199
|
+
const activity = iterator.activities[iterator.index];
|
|
200
|
+
const timestamp = new Date(activity.timestamp).getTime();
|
|
201
|
+
if (timestamp > maxTimestamp) {
|
|
202
|
+
maxTimestamp = timestamp;
|
|
203
|
+
maxIteratorIndex = i;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// If we found an activity, add it to results
|
|
208
|
+
if (maxIteratorIndex >= 0) {
|
|
209
|
+
const iterator = projectIterators[maxIteratorIndex];
|
|
210
|
+
const activity = iterator.activities[iterator.index];
|
|
211
|
+
result.push({
|
|
212
|
+
...activity,
|
|
213
|
+
projectId: iterator.projectId,
|
|
214
|
+
projectName: iterator.projectName
|
|
215
|
+
});
|
|
216
|
+
// Move iterator forward
|
|
217
|
+
iterator.index++;
|
|
218
|
+
// Remove iterator if exhausted
|
|
219
|
+
if (iterator.index >= iterator.activities.length) {
|
|
220
|
+
projectIterators.splice(maxIteratorIndex, 1);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
// No more activities
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return result;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Clean up stale agents (remove disconnected agents older than retention period)
|
|
232
|
+
*/
|
|
233
|
+
cleanupStaleAgents() {
|
|
234
|
+
const now = Date.now();
|
|
235
|
+
const disconnectedRetentionMs = 60 * 60 * 1000; // Keep disconnected for 1 hour
|
|
236
|
+
for (const [agentId, agent] of this.agents.entries()) {
|
|
237
|
+
const lastActivityTime = new Date(agent.lastActivity).getTime();
|
|
238
|
+
const inactiveDuration = now - lastActivityTime;
|
|
239
|
+
// Remove agents that have been disconnected for too long
|
|
240
|
+
if (agent.status === 'disconnected' && inactiveDuration > disconnectedRetentionMs) {
|
|
241
|
+
this.agents.delete(agentId);
|
|
242
|
+
this.agentToProject.delete(agentId);
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
// Mark idle agents as disconnected if inactive for 30+ minutes
|
|
246
|
+
if (inactiveDuration > this.agentDisconnectTimeoutMs) {
|
|
247
|
+
agent.status = 'disconnected';
|
|
248
|
+
this.agents.set(agentId, agent);
|
|
249
|
+
}
|
|
250
|
+
// Mark active agents as idle if inactive for 5+ minutes
|
|
251
|
+
else if (agent.status === 'active' && inactiveDuration > this.agentIdleTimeoutMs) {
|
|
252
|
+
agent.status = 'idle';
|
|
253
|
+
this.agents.set(agentId, agent);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get all agents (automatically cleans up stale entries)
|
|
259
|
+
*/
|
|
260
|
+
getAgents() {
|
|
261
|
+
this.cleanupStaleAgents();
|
|
262
|
+
return Array.from(this.agents.values())
|
|
263
|
+
.sort((a, b) => new Date(b.lastActivity).getTime() - new Date(a.lastActivity).getTime());
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Get agents working in a specific project
|
|
267
|
+
*/
|
|
268
|
+
getProjectAgents(projectId) {
|
|
269
|
+
const agents = [];
|
|
270
|
+
for (const [agentId, currentProjectId] of this.agentToProject.entries()) {
|
|
271
|
+
if (currentProjectId === projectId) {
|
|
272
|
+
const agent = this.agents.get(agentId);
|
|
273
|
+
if (agent) {
|
|
274
|
+
agents.push(agent);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return agents.sort((a, b) => new Date(b.lastActivity).getTime() - new Date(a.lastActivity).getTime());
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Get agent by ID
|
|
282
|
+
*/
|
|
283
|
+
getAgent(agentId) {
|
|
284
|
+
return this.agents.get(agentId);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get overall metrics summary
|
|
288
|
+
*/
|
|
289
|
+
getMetrics() {
|
|
290
|
+
const now = Date.now();
|
|
291
|
+
const last24h = now - (24 * 60 * 60 * 1000);
|
|
292
|
+
let totalTokens = 0;
|
|
293
|
+
let totalCost = 0;
|
|
294
|
+
let totalLatency = 0;
|
|
295
|
+
let latencyCount = 0;
|
|
296
|
+
let requestCount = 0;
|
|
297
|
+
let errorCount = 0;
|
|
298
|
+
let tokens24h = 0;
|
|
299
|
+
let cost24h = 0;
|
|
300
|
+
let requests24h = 0;
|
|
301
|
+
let errors24h = 0;
|
|
302
|
+
// Aggregate from all project activities
|
|
303
|
+
for (const activities of this.activityLog.values()) {
|
|
304
|
+
for (const activity of activities) {
|
|
305
|
+
const activityTime = new Date(activity.timestamp).getTime();
|
|
306
|
+
const isRecent = activityTime > last24h;
|
|
307
|
+
requestCount++;
|
|
308
|
+
if (isRecent)
|
|
309
|
+
requests24h++;
|
|
310
|
+
if (activity.tokensUsed) {
|
|
311
|
+
totalTokens += activity.tokensUsed;
|
|
312
|
+
if (isRecent)
|
|
313
|
+
tokens24h += activity.tokensUsed;
|
|
314
|
+
}
|
|
315
|
+
if (activity.estimatedCost) {
|
|
316
|
+
totalCost += activity.estimatedCost;
|
|
317
|
+
if (isRecent)
|
|
318
|
+
cost24h += activity.estimatedCost;
|
|
319
|
+
}
|
|
320
|
+
if (activity.latencyMs) {
|
|
321
|
+
totalLatency += activity.latencyMs;
|
|
322
|
+
latencyCount++;
|
|
323
|
+
}
|
|
324
|
+
if (activity.outcome === 'failure') {
|
|
325
|
+
errorCount++;
|
|
326
|
+
if (isRecent)
|
|
327
|
+
errors24h++;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return {
|
|
332
|
+
totalTokens,
|
|
333
|
+
totalCost,
|
|
334
|
+
avgLatency: latencyCount > 0 ? totalLatency / latencyCount : 0,
|
|
335
|
+
errorRate: requestCount > 0 ? errorCount / requestCount : 0,
|
|
336
|
+
requestCount,
|
|
337
|
+
last24h: {
|
|
338
|
+
tokens: tokens24h,
|
|
339
|
+
cost: cost24h,
|
|
340
|
+
requests: requests24h,
|
|
341
|
+
errors: errors24h
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Get metrics for a specific project
|
|
347
|
+
*/
|
|
348
|
+
getProjectMetrics(projectId) {
|
|
349
|
+
const now = Date.now();
|
|
350
|
+
const last24h = now - (24 * 60 * 60 * 1000);
|
|
351
|
+
let totalTokens = 0;
|
|
352
|
+
let totalCost = 0;
|
|
353
|
+
let totalLatency = 0;
|
|
354
|
+
let latencyCount = 0;
|
|
355
|
+
let requestCount = 0;
|
|
356
|
+
let errorCount = 0;
|
|
357
|
+
let tokens24h = 0;
|
|
358
|
+
let cost24h = 0;
|
|
359
|
+
let requests24h = 0;
|
|
360
|
+
let errors24h = 0;
|
|
361
|
+
const activities = this.activityLog.get(projectId) || [];
|
|
362
|
+
for (const activity of activities) {
|
|
363
|
+
const activityTime = new Date(activity.timestamp).getTime();
|
|
364
|
+
const isRecent = activityTime > last24h;
|
|
365
|
+
requestCount++;
|
|
366
|
+
if (isRecent)
|
|
367
|
+
requests24h++;
|
|
368
|
+
if (activity.tokensUsed) {
|
|
369
|
+
totalTokens += activity.tokensUsed;
|
|
370
|
+
if (isRecent)
|
|
371
|
+
tokens24h += activity.tokensUsed;
|
|
372
|
+
}
|
|
373
|
+
if (activity.estimatedCost) {
|
|
374
|
+
totalCost += activity.estimatedCost;
|
|
375
|
+
if (isRecent)
|
|
376
|
+
cost24h += activity.estimatedCost;
|
|
377
|
+
}
|
|
378
|
+
if (activity.latencyMs) {
|
|
379
|
+
totalLatency += activity.latencyMs;
|
|
380
|
+
latencyCount++;
|
|
381
|
+
}
|
|
382
|
+
if (activity.outcome === 'failure') {
|
|
383
|
+
errorCount++;
|
|
384
|
+
if (isRecent)
|
|
385
|
+
errors24h++;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
return {
|
|
389
|
+
totalTokens,
|
|
390
|
+
totalCost,
|
|
391
|
+
avgLatency: latencyCount > 0 ? totalLatency / latencyCount : 0,
|
|
392
|
+
errorRate: requestCount > 0 ? errorCount / requestCount : 0,
|
|
393
|
+
requestCount,
|
|
394
|
+
last24h: {
|
|
395
|
+
tokens: tokens24h,
|
|
396
|
+
cost: cost24h,
|
|
397
|
+
requests: requests24h,
|
|
398
|
+
errors: errors24h
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Mark agent as disconnected
|
|
404
|
+
*/
|
|
405
|
+
markAgentDisconnected(agentId) {
|
|
406
|
+
const agent = this.agents.get(agentId);
|
|
407
|
+
if (agent) {
|
|
408
|
+
agent.status = 'disconnected';
|
|
409
|
+
this.agents.set(agentId, agent);
|
|
410
|
+
}
|
|
411
|
+
// Remove from project mapping
|
|
412
|
+
this.agentToProject.delete(agentId);
|
|
413
|
+
// Update project active agent count
|
|
414
|
+
for (const project of this.projects.values()) {
|
|
415
|
+
project.activeAgents = this.getProjectAgents(project.id).filter(a => a.status === 'active').length;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Clean up old data
|
|
420
|
+
*/
|
|
421
|
+
cleanup() {
|
|
422
|
+
const now = Date.now();
|
|
423
|
+
const cutoff = now - this.activityRetentionMs;
|
|
424
|
+
// Clean up old activities
|
|
425
|
+
for (const [projectId, activities] of this.activityLog.entries()) {
|
|
426
|
+
const filtered = activities.filter(a => new Date(a.timestamp).getTime() > cutoff);
|
|
427
|
+
this.activityLog.set(projectId, filtered);
|
|
428
|
+
}
|
|
429
|
+
// Mark idle agents as disconnected
|
|
430
|
+
const idleThreshold = 5 * 60 * 1000; // 5 minutes
|
|
431
|
+
for (const agent of this.agents.values()) {
|
|
432
|
+
const lastActivity = new Date(agent.lastActivity).getTime();
|
|
433
|
+
if (now - lastActivity > idleThreshold && agent.status === 'active') {
|
|
434
|
+
agent.status = 'idle';
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Get project ID from path
|
|
440
|
+
*/
|
|
441
|
+
getProjectId(projectPath) {
|
|
442
|
+
// Use basename as ID, or full path hash if needed
|
|
443
|
+
const normalized = path.resolve(projectPath);
|
|
444
|
+
return path.basename(normalized) + '-' + this.hashString(normalized);
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Create project info from path
|
|
448
|
+
*/
|
|
449
|
+
async createProjectInfo(projectPath) {
|
|
450
|
+
const projectId = this.getProjectId(projectPath);
|
|
451
|
+
const name = path.basename(projectPath);
|
|
452
|
+
const info = {
|
|
453
|
+
id: projectId,
|
|
454
|
+
name,
|
|
455
|
+
path: projectPath,
|
|
456
|
+
type: 'directory',
|
|
457
|
+
activeAgents: 0,
|
|
458
|
+
totalActions: 0,
|
|
459
|
+
stats: {
|
|
460
|
+
totalEvents: 0,
|
|
461
|
+
successRate: 0,
|
|
462
|
+
avgRiskScore: 0,
|
|
463
|
+
topCategories: []
|
|
464
|
+
}
|
|
465
|
+
};
|
|
466
|
+
// Check if it's a git repo and get git info
|
|
467
|
+
try {
|
|
468
|
+
const gitDir = path.join(projectPath, '.git');
|
|
469
|
+
if (fs.existsSync(gitDir)) {
|
|
470
|
+
info.type = 'git';
|
|
471
|
+
await this.updateGitInfo(info, projectPath);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
catch (err) {
|
|
475
|
+
// Not a git repo or error reading git info
|
|
476
|
+
}
|
|
477
|
+
return info;
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Update git information for a project with proper error handling
|
|
481
|
+
*/
|
|
482
|
+
async updateGitInfo(project, projectPath) {
|
|
483
|
+
const timeout = 5000; // 5 second timeout for git commands
|
|
484
|
+
try {
|
|
485
|
+
// Get branch
|
|
486
|
+
try {
|
|
487
|
+
const { stdout: branch } = await execAsync('git rev-parse --abbrev-ref HEAD', {
|
|
488
|
+
cwd: projectPath,
|
|
489
|
+
timeout
|
|
490
|
+
});
|
|
491
|
+
if (branch && branch.trim()) {
|
|
492
|
+
project.gitBranch = branch.trim();
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
catch (branchErr) {
|
|
496
|
+
console.warn(`[ProjectTracker] Failed to get git branch for ${projectPath}:`, branchErr.message);
|
|
497
|
+
}
|
|
498
|
+
// Get remote URL
|
|
499
|
+
try {
|
|
500
|
+
const { stdout: remote } = await execAsync('git remote get-url origin', {
|
|
501
|
+
cwd: projectPath,
|
|
502
|
+
timeout
|
|
503
|
+
});
|
|
504
|
+
if (remote && remote.trim()) {
|
|
505
|
+
project.gitRemote = remote.trim();
|
|
506
|
+
// Extract repo name from remote URL
|
|
507
|
+
const match = remote.trim().match(/([^/]+\/[^/]+?)(\.git)?$/);
|
|
508
|
+
if (match) {
|
|
509
|
+
project.gitRepo = match[1].replace('.git', '');
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
catch (remoteErr) {
|
|
514
|
+
// Remote might not exist (not pushed yet) - this is normal, don't log
|
|
515
|
+
if (remoteErr.code !== 128) { // Git error code 128 = no remote
|
|
516
|
+
console.warn(`[ProjectTracker] Failed to get git remote for ${projectPath}:`, remoteErr.message);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
// Get latest commit
|
|
520
|
+
try {
|
|
521
|
+
const { stdout: commit } = await execAsync('git rev-parse --short HEAD', {
|
|
522
|
+
cwd: projectPath,
|
|
523
|
+
timeout
|
|
524
|
+
});
|
|
525
|
+
if (commit && commit.trim()) {
|
|
526
|
+
project.gitCommit = commit.trim();
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
catch (commitErr) {
|
|
530
|
+
console.warn(`[ProjectTracker] Failed to get git commit for ${projectPath}:`, commitErr.message);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
catch (err) {
|
|
534
|
+
// Overall git failure - log for debugging
|
|
535
|
+
console.error(`[ProjectTracker] Git info update failed for ${projectPath}:`, err);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
/**
|
|
539
|
+
* Update project statistics
|
|
540
|
+
*/
|
|
541
|
+
updateProjectStats(projectId) {
|
|
542
|
+
const project = this.projects.get(projectId);
|
|
543
|
+
if (!project)
|
|
544
|
+
return;
|
|
545
|
+
const activities = this.activityLog.get(projectId) || [];
|
|
546
|
+
project.stats.totalEvents = activities.length;
|
|
547
|
+
project.totalActions = activities.length;
|
|
548
|
+
if (activities.length > 0) {
|
|
549
|
+
// Last activity
|
|
550
|
+
project.lastActivity = activities[0].timestamp;
|
|
551
|
+
// Success rate
|
|
552
|
+
const successes = activities.filter(a => a.outcome === 'success').length;
|
|
553
|
+
project.stats.successRate = successes / activities.length;
|
|
554
|
+
// Average risk score
|
|
555
|
+
const withRisk = activities.filter(a => a.riskScore !== undefined);
|
|
556
|
+
if (withRisk.length > 0) {
|
|
557
|
+
const totalRisk = withRisk.reduce((sum, a) => sum + (a.riskScore || 0), 0);
|
|
558
|
+
project.stats.avgRiskScore = totalRisk / withRisk.length;
|
|
559
|
+
}
|
|
560
|
+
// Top categories
|
|
561
|
+
const categoryCounts = new Map();
|
|
562
|
+
for (const activity of activities) {
|
|
563
|
+
const count = categoryCounts.get(activity.category) || 0;
|
|
564
|
+
categoryCounts.set(activity.category, count + 1);
|
|
565
|
+
}
|
|
566
|
+
project.stats.topCategories = Array.from(categoryCounts.entries())
|
|
567
|
+
.map(([category, count]) => ({ category, count }))
|
|
568
|
+
.sort((a, b) => b.count - a.count)
|
|
569
|
+
.slice(0, 5);
|
|
570
|
+
}
|
|
571
|
+
// Update active agents count
|
|
572
|
+
project.activeAgents = this.getProjectAgents(projectId).filter(a => a.status === 'active').length;
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Update agent information
|
|
576
|
+
*/
|
|
577
|
+
updateAgentInfo(agentId, sessionId, projectPath) {
|
|
578
|
+
const projectId = this.getProjectId(projectPath);
|
|
579
|
+
let agent = this.agents.get(agentId);
|
|
580
|
+
if (!agent) {
|
|
581
|
+
agent = {
|
|
582
|
+
agentId,
|
|
583
|
+
sessionId,
|
|
584
|
+
currentProject: projectId,
|
|
585
|
+
startTime: new Date().toISOString(),
|
|
586
|
+
lastActivity: new Date().toISOString(),
|
|
587
|
+
actionsCount: 1,
|
|
588
|
+
status: 'active'
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
else {
|
|
592
|
+
agent.currentProject = projectId;
|
|
593
|
+
agent.lastActivity = new Date().toISOString();
|
|
594
|
+
agent.actionsCount++;
|
|
595
|
+
agent.status = 'active';
|
|
596
|
+
}
|
|
597
|
+
this.agents.set(agentId, agent);
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Simple string hash for generating IDs
|
|
601
|
+
*/
|
|
602
|
+
hashString(str) {
|
|
603
|
+
let hash = 0;
|
|
604
|
+
for (let i = 0; i < str.length; i++) {
|
|
605
|
+
const char = str.charCodeAt(i);
|
|
606
|
+
hash = ((hash << 5) - hash) + char;
|
|
607
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
608
|
+
}
|
|
609
|
+
return Math.abs(hash).toString(36).substring(0, 8);
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
export const projectTracker = new ProjectTracker();
|
|
613
|
+
// Cleanup old data every hour
|
|
614
|
+
setInterval(() => {
|
|
615
|
+
projectTracker.cleanup();
|
|
616
|
+
}, 60 * 60 * 1000);
|
|
617
|
+
//# sourceMappingURL=ProjectTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectTracker.js","sourceRoot":"","sources":["../../src/supervisor/ProjectTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supervisor module exports
|
|
3
|
+
*/
|
|
4
|
+
export { AgentSupervisor, supervisor, type AgentSupervisorOptions } from './AgentSupervisor.js';
|
|
5
|
+
export { projectTracker, type ProjectInfo, type AgentInfo, type AgentActivity } from './ProjectTracker.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/supervisor/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/supervisor/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,UAAU,EAA+B,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,cAAc,EAAwD,MAAM,qBAAqB,CAAC"}
|