@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,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Managed Server Registry
|
|
3
|
+
*
|
|
4
|
+
* Allows registering servers (ip + sourceDir) and checking online status.
|
|
5
|
+
*/
|
|
6
|
+
import { promises as fsp } from 'fs';
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import net from 'net';
|
|
10
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
11
|
+
export class ManagedServerRegistry {
|
|
12
|
+
filePath;
|
|
13
|
+
servers = new Map();
|
|
14
|
+
loaded = false;
|
|
15
|
+
constructor(filePath) {
|
|
16
|
+
this.filePath = filePath || path.join(process.cwd(), 'managed-servers.json');
|
|
17
|
+
}
|
|
18
|
+
async ensureLoaded() {
|
|
19
|
+
if (this.loaded)
|
|
20
|
+
return;
|
|
21
|
+
try {
|
|
22
|
+
const data = await fsp.readFile(this.filePath, 'utf8');
|
|
23
|
+
const parsed = JSON.parse(data);
|
|
24
|
+
for (const s of parsed)
|
|
25
|
+
this.servers.set(s.id, s);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
// If file doesn't exist, start empty
|
|
29
|
+
if (err.code !== 'ENOENT') {
|
|
30
|
+
// eslint-disable-next-line no-console
|
|
31
|
+
console.error('Failed to load managed servers:', err);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
this.loaded = true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async persist() {
|
|
39
|
+
const list = Array.from(this.servers.values());
|
|
40
|
+
await fsp.writeFile(this.filePath, JSON.stringify(list, null, 2), 'utf8');
|
|
41
|
+
}
|
|
42
|
+
async addServer(params) {
|
|
43
|
+
await this.ensureLoaded();
|
|
44
|
+
const server = {
|
|
45
|
+
id: uuidv4(),
|
|
46
|
+
ip: params.ip,
|
|
47
|
+
sourceDir: params.sourceDir,
|
|
48
|
+
name: params.name,
|
|
49
|
+
port: params.port,
|
|
50
|
+
createdAt: new Date().toISOString()
|
|
51
|
+
};
|
|
52
|
+
this.servers.set(server.id, server);
|
|
53
|
+
await this.persist();
|
|
54
|
+
return server;
|
|
55
|
+
}
|
|
56
|
+
async removeServer(id) {
|
|
57
|
+
await this.ensureLoaded();
|
|
58
|
+
const removed = this.servers.delete(id);
|
|
59
|
+
if (removed)
|
|
60
|
+
await this.persist();
|
|
61
|
+
return removed;
|
|
62
|
+
}
|
|
63
|
+
async listServers() {
|
|
64
|
+
await this.ensureLoaded();
|
|
65
|
+
return Array.from(this.servers.values());
|
|
66
|
+
}
|
|
67
|
+
async getServer(id) {
|
|
68
|
+
await this.ensureLoaded();
|
|
69
|
+
return this.servers.get(id);
|
|
70
|
+
}
|
|
71
|
+
async checkStatus(input) {
|
|
72
|
+
await this.ensureLoaded();
|
|
73
|
+
let ip = input.ip;
|
|
74
|
+
let sourceDir = input.sourceDir;
|
|
75
|
+
let id = input.id;
|
|
76
|
+
if (input.id) {
|
|
77
|
+
const found = this.servers.get(input.id);
|
|
78
|
+
if (!found) {
|
|
79
|
+
throw new Error(`Unknown managed server: ${input.id}`);
|
|
80
|
+
}
|
|
81
|
+
ip = found.ip;
|
|
82
|
+
sourceDir = found.sourceDir;
|
|
83
|
+
id = found.id;
|
|
84
|
+
}
|
|
85
|
+
if (!ip || !sourceDir) {
|
|
86
|
+
throw new Error('Must provide either id or both ip and sourceDir');
|
|
87
|
+
}
|
|
88
|
+
// Use custom port if available, otherwise default to common ports
|
|
89
|
+
let defaultPorts = [22, 80, 443];
|
|
90
|
+
if (input.id) {
|
|
91
|
+
const found = this.servers.get(input.id);
|
|
92
|
+
if (found?.port) {
|
|
93
|
+
defaultPorts = [found.port];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const ports = input.ports && input.ports.length > 0 ? input.ports : defaultPorts;
|
|
97
|
+
const byPort = {};
|
|
98
|
+
// Try TCP connect to each port with short timeout
|
|
99
|
+
await Promise.all(ports.map(async (port) => {
|
|
100
|
+
byPort[port] = await this.tcpCheck(ip, port, 1000);
|
|
101
|
+
}));
|
|
102
|
+
const online = Object.values(byPort).some(Boolean);
|
|
103
|
+
const sourceDirExists = fs.existsSync(sourceDir);
|
|
104
|
+
return {
|
|
105
|
+
id,
|
|
106
|
+
ip,
|
|
107
|
+
online,
|
|
108
|
+
ports: byPort,
|
|
109
|
+
sourceDir,
|
|
110
|
+
sourceDirExists,
|
|
111
|
+
checkedAt: new Date().toISOString()
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
tcpCheck(host, port, timeoutMs) {
|
|
115
|
+
return new Promise((resolve) => {
|
|
116
|
+
const socket = new net.Socket();
|
|
117
|
+
let done = false;
|
|
118
|
+
const finalize = (result) => {
|
|
119
|
+
if (done)
|
|
120
|
+
return;
|
|
121
|
+
done = true;
|
|
122
|
+
try {
|
|
123
|
+
socket.destroy();
|
|
124
|
+
}
|
|
125
|
+
catch { /* noop */ }
|
|
126
|
+
resolve(result);
|
|
127
|
+
};
|
|
128
|
+
socket.setTimeout(timeoutMs);
|
|
129
|
+
socket.once('connect', () => finalize(true));
|
|
130
|
+
socket.once('timeout', () => finalize(false));
|
|
131
|
+
socket.once('error', () => finalize(false));
|
|
132
|
+
// Some hosts may refuse connection quickly – still indicates reachability
|
|
133
|
+
socket.once('close', (hadError) => finalize(!hadError));
|
|
134
|
+
try {
|
|
135
|
+
socket.connect(port, host);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
finalize(false);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Singleton default registry
|
|
144
|
+
export const managedServerRegistry = new ManagedServerRegistry();
|
|
145
|
+
//# sourceMappingURL=ManagedServerRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManagedServerRegistry.js","sourceRoot":"","sources":["../../src/supervisor/ManagedServerRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,188 @@
|
|
|
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
|
+
export interface AgentActivity {
|
|
11
|
+
agentId: string;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
action: string;
|
|
14
|
+
category: string;
|
|
15
|
+
timestamp: string;
|
|
16
|
+
details?: any;
|
|
17
|
+
riskScore?: number;
|
|
18
|
+
outcome?: 'success' | 'failure' | 'pending';
|
|
19
|
+
duration?: number;
|
|
20
|
+
tokensUsed?: number;
|
|
21
|
+
estimatedCost?: number;
|
|
22
|
+
latencyMs?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface MetricsSummary {
|
|
25
|
+
totalTokens: number;
|
|
26
|
+
totalCost: number;
|
|
27
|
+
avgLatency: number;
|
|
28
|
+
errorRate: number;
|
|
29
|
+
requestCount: number;
|
|
30
|
+
last24h: {
|
|
31
|
+
tokens: number;
|
|
32
|
+
cost: number;
|
|
33
|
+
requests: number;
|
|
34
|
+
errors: number;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export interface ProjectInfo {
|
|
38
|
+
id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
path: string;
|
|
41
|
+
type: 'git' | 'directory';
|
|
42
|
+
gitRepo?: string;
|
|
43
|
+
gitBranch?: string;
|
|
44
|
+
gitRemote?: string;
|
|
45
|
+
gitCommit?: string;
|
|
46
|
+
productionPort?: number;
|
|
47
|
+
productionUrl?: string;
|
|
48
|
+
activeAgents: number;
|
|
49
|
+
lastActivity?: string;
|
|
50
|
+
totalActions: number;
|
|
51
|
+
stats: {
|
|
52
|
+
totalEvents: number;
|
|
53
|
+
successRate: number;
|
|
54
|
+
avgRiskScore: number;
|
|
55
|
+
topCategories: {
|
|
56
|
+
category: string;
|
|
57
|
+
count: number;
|
|
58
|
+
}[];
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export interface AgentInfo {
|
|
62
|
+
agentId: string;
|
|
63
|
+
sessionId: string;
|
|
64
|
+
currentProject?: string;
|
|
65
|
+
startTime: string;
|
|
66
|
+
lastActivity: string;
|
|
67
|
+
actionsCount: number;
|
|
68
|
+
status: 'active' | 'idle' | 'disconnected';
|
|
69
|
+
}
|
|
70
|
+
declare class ProjectTracker {
|
|
71
|
+
private projects;
|
|
72
|
+
private agents;
|
|
73
|
+
private activityLog;
|
|
74
|
+
private agentActivityIndex;
|
|
75
|
+
private agentToProject;
|
|
76
|
+
private maxActivitiesPerProject;
|
|
77
|
+
private activityRetentionMs;
|
|
78
|
+
private agentIdleTimeoutMs;
|
|
79
|
+
private agentDisconnectTimeoutMs;
|
|
80
|
+
/**
|
|
81
|
+
* Register or update a project
|
|
82
|
+
*/
|
|
83
|
+
registerProject(projectPath: string): Promise<ProjectInfo>;
|
|
84
|
+
/**
|
|
85
|
+
* Record agent activity in a project
|
|
86
|
+
* NO LONGER auto-creates agent entries - use registerSession() explicitly
|
|
87
|
+
*/
|
|
88
|
+
recordActivity(projectPath: string, agentId: string, sessionId: string, activity: Omit<AgentActivity, 'agentId' | 'sessionId' | 'timestamp'>): void;
|
|
89
|
+
/**
|
|
90
|
+
* Explicitly register a session/agent working on a project
|
|
91
|
+
* Must be called by services or Claude instances to appear in agent list
|
|
92
|
+
*/
|
|
93
|
+
registerSession(params: {
|
|
94
|
+
agentId: string;
|
|
95
|
+
sessionId: string;
|
|
96
|
+
projectPath: string;
|
|
97
|
+
agentType?: 'claude' | 'scheduler' | 'service' | 'manual';
|
|
98
|
+
metadata?: Record<string, any>;
|
|
99
|
+
}): AgentInfo;
|
|
100
|
+
/**
|
|
101
|
+
* Explicitly unregister/complete a session
|
|
102
|
+
*/
|
|
103
|
+
completeSession(agentId: string, outcome?: 'success' | 'failure' | 'cancelled'): void;
|
|
104
|
+
/**
|
|
105
|
+
* Get all projects
|
|
106
|
+
*/
|
|
107
|
+
getProjects(): ProjectInfo[];
|
|
108
|
+
/**
|
|
109
|
+
* Get project by ID or path
|
|
110
|
+
*/
|
|
111
|
+
getProject(idOrPath: string): ProjectInfo | undefined;
|
|
112
|
+
/**
|
|
113
|
+
* Get project activities
|
|
114
|
+
*/
|
|
115
|
+
getProjectActivities(projectId: string, limit?: number): AgentActivity[];
|
|
116
|
+
/**
|
|
117
|
+
* Get agent activities efficiently (uses index, no N+1 queries)
|
|
118
|
+
*/
|
|
119
|
+
getAgentActivities(agentId: string, limit?: number): AgentActivity[];
|
|
120
|
+
/**
|
|
121
|
+
* Get recent activities across all projects efficiently
|
|
122
|
+
* Uses k-way merge for optimal performance (O(n log k) where n=limit, k=projects)
|
|
123
|
+
* Avoids fetching and sorting thousands of activities when only need a few
|
|
124
|
+
*/
|
|
125
|
+
getAllRecentActivities(limit?: number): Array<AgentActivity & {
|
|
126
|
+
projectId: string;
|
|
127
|
+
projectName: string;
|
|
128
|
+
}>;
|
|
129
|
+
/**
|
|
130
|
+
* Clean up stale agents (remove disconnected agents older than retention period)
|
|
131
|
+
*/
|
|
132
|
+
private cleanupStaleAgents;
|
|
133
|
+
/**
|
|
134
|
+
* Get all agents (automatically cleans up stale entries)
|
|
135
|
+
*/
|
|
136
|
+
getAgents(): AgentInfo[];
|
|
137
|
+
/**
|
|
138
|
+
* Get agents working in a specific project
|
|
139
|
+
*/
|
|
140
|
+
getProjectAgents(projectId: string): AgentInfo[];
|
|
141
|
+
/**
|
|
142
|
+
* Get agent by ID
|
|
143
|
+
*/
|
|
144
|
+
getAgent(agentId: string): AgentInfo | undefined;
|
|
145
|
+
/**
|
|
146
|
+
* Get overall metrics summary
|
|
147
|
+
*/
|
|
148
|
+
getMetrics(): MetricsSummary;
|
|
149
|
+
/**
|
|
150
|
+
* Get metrics for a specific project
|
|
151
|
+
*/
|
|
152
|
+
getProjectMetrics(projectId: string): MetricsSummary;
|
|
153
|
+
/**
|
|
154
|
+
* Mark agent as disconnected
|
|
155
|
+
*/
|
|
156
|
+
markAgentDisconnected(agentId: string): void;
|
|
157
|
+
/**
|
|
158
|
+
* Clean up old data
|
|
159
|
+
*/
|
|
160
|
+
cleanup(): void;
|
|
161
|
+
/**
|
|
162
|
+
* Get project ID from path
|
|
163
|
+
*/
|
|
164
|
+
private getProjectId;
|
|
165
|
+
/**
|
|
166
|
+
* Create project info from path
|
|
167
|
+
*/
|
|
168
|
+
private createProjectInfo;
|
|
169
|
+
/**
|
|
170
|
+
* Update git information for a project with proper error handling
|
|
171
|
+
*/
|
|
172
|
+
private updateGitInfo;
|
|
173
|
+
/**
|
|
174
|
+
* Update project statistics
|
|
175
|
+
*/
|
|
176
|
+
private updateProjectStats;
|
|
177
|
+
/**
|
|
178
|
+
* Update agent information
|
|
179
|
+
*/
|
|
180
|
+
private updateAgentInfo;
|
|
181
|
+
/**
|
|
182
|
+
* Simple string hash for generating IDs
|
|
183
|
+
*/
|
|
184
|
+
private hashString;
|
|
185
|
+
}
|
|
186
|
+
export declare const projectTracker: ProjectTracker;
|
|
187
|
+
export {};
|
|
188
|
+
//# sourceMappingURL=ProjectTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectTracker.d.ts","sourceRoot":"","sources":["../../src/supervisor/ProjectTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,WAAW,CAAC;IAG1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IAGrB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACtD,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,cAAc,CAAC;CAC5C;AAED,cAAM,cAAc;IAClB,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,WAAW,CAA2C;IAC9D,OAAO,CAAC,kBAAkB,CAA2C;IACrE,OAAO,CAAC,cAAc,CAAkC;IAGxD,OAAO,CAAC,uBAAuB,CAAQ;IACvC,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,kBAAkB,CAAiB;IAC3C,OAAO,CAAC,wBAAwB,CAAkB;IAElD;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgBhE;;;OAGG;IACH,cAAc,CACZ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,GACnE,IAAI;IA6CP;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;QAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAChC,GAAG,SAAS;IAqCb;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,IAAI;IAcrF;;OAEG;IACH,WAAW,IAAI,WAAW,EAAE;IAW5B;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAKrD;;OAEG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,aAAa,EAAE;IAKrE;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,aAAa,EAAE;IAKjE;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,SAAK,GAAG,KAAK,CAAC,aAAa,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAqErG;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;OAEG;IACH,SAAS,IAAI,SAAS,EAAE;IAMxB;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE;IAiBhD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIhD;;OAEG;IACH,UAAU,IAAI,cAAc;IA8D5B;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc;IA6DpD;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAgB5C;;OAEG;IACH,OAAO,IAAI,IAAI;IAsBf;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;YACW,iBAAiB;IAiC/B;;OAEG;YACW,aAAa;IAyD3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyC1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,OAAO,CAAC,UAAU;CASnB;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|