@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.
Files changed (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +446 -0
  3. package/dist/analyzers/ArchitectureDetector.d.ts +44 -0
  4. package/dist/analyzers/ArchitectureDetector.d.ts.map +1 -0
  5. package/dist/analyzers/ArchitectureDetector.js +218 -0
  6. package/dist/analyzers/ArchitectureDetector.js.map +1 -0
  7. package/dist/analyzers/CSSAnalyzer.d.ts +104 -0
  8. package/dist/analyzers/CSSAnalyzer.d.ts.map +1 -0
  9. package/dist/analyzers/CSSAnalyzer.js +578 -0
  10. package/dist/analyzers/CSSAnalyzer.js.map +1 -0
  11. package/dist/analyzers/index.d.ts +5 -0
  12. package/dist/analyzers/index.d.ts.map +1 -0
  13. package/dist/analyzers/index.js +5 -0
  14. package/dist/analyzers/index.js.map +1 -0
  15. package/dist/cli.d.ts +8 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +174 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/design-system/index.d.ts +6 -0
  20. package/dist/design-system/index.d.ts.map +1 -0
  21. package/dist/design-system/index.js +6 -0
  22. package/dist/design-system/index.js.map +1 -0
  23. package/dist/design-system/tokens.d.ts +106 -0
  24. package/dist/design-system/tokens.d.ts.map +1 -0
  25. package/dist/design-system/tokens.js +554 -0
  26. package/dist/design-system/tokens.js.map +1 -0
  27. package/dist/engine/AppMonitor.d.ts +162 -0
  28. package/dist/engine/AppMonitor.d.ts.map +1 -0
  29. package/dist/engine/AppMonitor.js +754 -0
  30. package/dist/engine/AppMonitor.js.map +1 -0
  31. package/dist/engine/AuditLogger.d.ts +138 -0
  32. package/dist/engine/AuditLogger.d.ts.map +1 -0
  33. package/dist/engine/AuditLogger.js +448 -0
  34. package/dist/engine/AuditLogger.js.map +1 -0
  35. package/dist/engine/GitHubApprovalManager.d.ts +106 -0
  36. package/dist/engine/GitHubApprovalManager.d.ts.map +1 -0
  37. package/dist/engine/GitHubApprovalManager.js +315 -0
  38. package/dist/engine/GitHubApprovalManager.js.map +1 -0
  39. package/dist/engine/RateLimiter.d.ts +79 -0
  40. package/dist/engine/RateLimiter.d.ts.map +1 -0
  41. package/dist/engine/RateLimiter.js +232 -0
  42. package/dist/engine/RateLimiter.js.map +1 -0
  43. package/dist/engine/RulesEngine.d.ts +77 -0
  44. package/dist/engine/RulesEngine.d.ts.map +1 -0
  45. package/dist/engine/RulesEngine.js +400 -0
  46. package/dist/engine/RulesEngine.js.map +1 -0
  47. package/dist/engine/TaskManager.d.ts +173 -0
  48. package/dist/engine/TaskManager.d.ts.map +1 -0
  49. package/dist/engine/TaskManager.js +678 -0
  50. package/dist/engine/TaskManager.js.map +1 -0
  51. package/dist/engine/index.d.ts +9 -0
  52. package/dist/engine/index.d.ts.map +1 -0
  53. package/dist/engine/index.js +9 -0
  54. package/dist/engine/index.js.map +1 -0
  55. package/dist/index.d.ts +21 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +29 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/rules/architecture.d.ts +9 -0
  60. package/dist/rules/architecture.d.ts.map +1 -0
  61. package/dist/rules/architecture.js +322 -0
  62. package/dist/rules/architecture.js.map +1 -0
  63. package/dist/rules/azure.d.ts +7 -0
  64. package/dist/rules/azure.d.ts.map +1 -0
  65. package/dist/rules/azure.js +138 -0
  66. package/dist/rules/azure.js.map +1 -0
  67. package/dist/rules/compliance.d.ts +9 -0
  68. package/dist/rules/compliance.d.ts.map +1 -0
  69. package/dist/rules/compliance.js +304 -0
  70. package/dist/rules/compliance.js.map +1 -0
  71. package/dist/rules/css.d.ts +10 -0
  72. package/dist/rules/css.d.ts.map +1 -0
  73. package/dist/rules/css.js +1239 -0
  74. package/dist/rules/css.js.map +1 -0
  75. package/dist/rules/flask.d.ts +7 -0
  76. package/dist/rules/flask.d.ts.map +1 -0
  77. package/dist/rules/flask.js +155 -0
  78. package/dist/rules/flask.js.map +1 -0
  79. package/dist/rules/index.d.ts +607 -0
  80. package/dist/rules/index.d.ts.map +1 -0
  81. package/dist/rules/index.js +401 -0
  82. package/dist/rules/index.js.map +1 -0
  83. package/dist/rules/ml-ai.d.ts +7 -0
  84. package/dist/rules/ml-ai.d.ts.map +1 -0
  85. package/dist/rules/ml-ai.js +150 -0
  86. package/dist/rules/ml-ai.js.map +1 -0
  87. package/dist/rules/operational.d.ts +9 -0
  88. package/dist/rules/operational.d.ts.map +1 -0
  89. package/dist/rules/operational.js +318 -0
  90. package/dist/rules/operational.js.map +1 -0
  91. package/dist/rules/security.d.ts +9 -0
  92. package/dist/rules/security.d.ts.map +1 -0
  93. package/dist/rules/security.js +287 -0
  94. package/dist/rules/security.js.map +1 -0
  95. package/dist/rules/storage.d.ts +7 -0
  96. package/dist/rules/storage.d.ts.map +1 -0
  97. package/dist/rules/storage.js +134 -0
  98. package/dist/rules/storage.js.map +1 -0
  99. package/dist/rules/stripe.d.ts +7 -0
  100. package/dist/rules/stripe.d.ts.map +1 -0
  101. package/dist/rules/stripe.js +140 -0
  102. package/dist/rules/stripe.js.map +1 -0
  103. package/dist/rules/testing.d.ts +7 -0
  104. package/dist/rules/testing.d.ts.map +1 -0
  105. package/dist/rules/testing.js +135 -0
  106. package/dist/rules/testing.js.map +1 -0
  107. package/dist/rules/ux.d.ts +9 -0
  108. package/dist/rules/ux.d.ts.map +1 -0
  109. package/dist/rules/ux.js +280 -0
  110. package/dist/rules/ux.js.map +1 -0
  111. package/dist/rules/websocket.d.ts +7 -0
  112. package/dist/rules/websocket.d.ts.map +1 -0
  113. package/dist/rules/websocket.js +136 -0
  114. package/dist/rules/websocket.js.map +1 -0
  115. package/dist/server.d.ts +49 -0
  116. package/dist/server.d.ts.map +1 -0
  117. package/dist/server.js +2330 -0
  118. package/dist/server.js.map +1 -0
  119. package/dist/supervisor/AgentSupervisor.d.ts +235 -0
  120. package/dist/supervisor/AgentSupervisor.d.ts.map +1 -0
  121. package/dist/supervisor/AgentSupervisor.js +596 -0
  122. package/dist/supervisor/AgentSupervisor.js.map +1 -0
  123. package/dist/supervisor/ManagedServerRegistry.d.ts +48 -0
  124. package/dist/supervisor/ManagedServerRegistry.d.ts.map +1 -0
  125. package/dist/supervisor/ManagedServerRegistry.js +145 -0
  126. package/dist/supervisor/ManagedServerRegistry.js.map +1 -0
  127. package/dist/supervisor/ProjectTracker.d.ts +188 -0
  128. package/dist/supervisor/ProjectTracker.d.ts.map +1 -0
  129. package/dist/supervisor/ProjectTracker.js +617 -0
  130. package/dist/supervisor/ProjectTracker.js.map +1 -0
  131. package/dist/supervisor/index.d.ts +6 -0
  132. package/dist/supervisor/index.d.ts.map +1 -0
  133. package/dist/supervisor/index.js +6 -0
  134. package/dist/supervisor/index.js.map +1 -0
  135. package/dist/types/index.d.ts +1176 -0
  136. package/dist/types/index.d.ts.map +1 -0
  137. package/dist/types/index.js +391 -0
  138. package/dist/types/index.js.map +1 -0
  139. package/dist/utils/errors.d.ts +86 -0
  140. package/dist/utils/errors.d.ts.map +1 -0
  141. package/dist/utils/errors.js +171 -0
  142. package/dist/utils/errors.js.map +1 -0
  143. package/dist/utils/index.d.ts +5 -0
  144. package/dist/utils/index.d.ts.map +1 -0
  145. package/dist/utils/index.js +5 -0
  146. package/dist/utils/index.js.map +1 -0
  147. package/dist/utils/shell.d.ts +22 -0
  148. package/dist/utils/shell.d.ts.map +1 -0
  149. package/dist/utils/shell.js +29 -0
  150. package/dist/utils/shell.js.map +1 -0
  151. 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":"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"}