@agent-relay/daemon 0.1.0

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 (109) hide show
  1. package/dist/agent-manager.d.ts +134 -0
  2. package/dist/agent-manager.d.ts.map +1 -0
  3. package/dist/agent-manager.js +578 -0
  4. package/dist/agent-manager.js.map +1 -0
  5. package/dist/agent-registry.d.ts +99 -0
  6. package/dist/agent-registry.d.ts.map +1 -0
  7. package/dist/agent-registry.js +213 -0
  8. package/dist/agent-registry.js.map +1 -0
  9. package/dist/agent-signing.d.ts +158 -0
  10. package/dist/agent-signing.d.ts.map +1 -0
  11. package/dist/agent-signing.js +523 -0
  12. package/dist/agent-signing.js.map +1 -0
  13. package/dist/api.d.ts +106 -0
  14. package/dist/api.d.ts.map +1 -0
  15. package/dist/api.js +876 -0
  16. package/dist/api.js.map +1 -0
  17. package/dist/auth.d.ts +94 -0
  18. package/dist/auth.d.ts.map +1 -0
  19. package/dist/auth.js +197 -0
  20. package/dist/auth.js.map +1 -0
  21. package/dist/channel-membership-store.d.ts +55 -0
  22. package/dist/channel-membership-store.d.ts.map +1 -0
  23. package/dist/channel-membership-store.js +176 -0
  24. package/dist/channel-membership-store.js.map +1 -0
  25. package/dist/cli-auth.d.ts +89 -0
  26. package/dist/cli-auth.d.ts.map +1 -0
  27. package/dist/cli-auth.js +792 -0
  28. package/dist/cli-auth.js.map +1 -0
  29. package/dist/cloud-sync.d.ts +150 -0
  30. package/dist/cloud-sync.d.ts.map +1 -0
  31. package/dist/cloud-sync.js +446 -0
  32. package/dist/cloud-sync.js.map +1 -0
  33. package/dist/connection.d.ts +130 -0
  34. package/dist/connection.d.ts.map +1 -0
  35. package/dist/connection.js +438 -0
  36. package/dist/connection.js.map +1 -0
  37. package/dist/consensus-integration.d.ts +167 -0
  38. package/dist/consensus-integration.d.ts.map +1 -0
  39. package/dist/consensus-integration.js +371 -0
  40. package/dist/consensus-integration.js.map +1 -0
  41. package/dist/consensus.d.ts +271 -0
  42. package/dist/consensus.d.ts.map +1 -0
  43. package/dist/consensus.js +632 -0
  44. package/dist/consensus.js.map +1 -0
  45. package/dist/delivery-tracker.d.ts +34 -0
  46. package/dist/delivery-tracker.d.ts.map +1 -0
  47. package/dist/delivery-tracker.js +104 -0
  48. package/dist/delivery-tracker.js.map +1 -0
  49. package/dist/enhanced-features.d.ts +118 -0
  50. package/dist/enhanced-features.d.ts.map +1 -0
  51. package/dist/enhanced-features.js +176 -0
  52. package/dist/enhanced-features.js.map +1 -0
  53. package/dist/index.d.ts +31 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +37 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/migrations/index.d.ts +73 -0
  58. package/dist/migrations/index.d.ts.map +1 -0
  59. package/dist/migrations/index.js +241 -0
  60. package/dist/migrations/index.js.map +1 -0
  61. package/dist/orchestrator.d.ts +217 -0
  62. package/dist/orchestrator.d.ts.map +1 -0
  63. package/dist/orchestrator.js +1143 -0
  64. package/dist/orchestrator.js.map +1 -0
  65. package/dist/rate-limiter.d.ts +68 -0
  66. package/dist/rate-limiter.d.ts.map +1 -0
  67. package/dist/rate-limiter.js +130 -0
  68. package/dist/rate-limiter.js.map +1 -0
  69. package/dist/registry.d.ts +9 -0
  70. package/dist/registry.d.ts.map +1 -0
  71. package/dist/registry.js +9 -0
  72. package/dist/registry.js.map +1 -0
  73. package/dist/relay-ledger.d.ts +261 -0
  74. package/dist/relay-ledger.d.ts.map +1 -0
  75. package/dist/relay-ledger.js +532 -0
  76. package/dist/relay-ledger.js.map +1 -0
  77. package/dist/relay-watchdog.d.ts +125 -0
  78. package/dist/relay-watchdog.d.ts.map +1 -0
  79. package/dist/relay-watchdog.js +611 -0
  80. package/dist/relay-watchdog.js.map +1 -0
  81. package/dist/repo-manager.d.ts +116 -0
  82. package/dist/repo-manager.d.ts.map +1 -0
  83. package/dist/repo-manager.js +384 -0
  84. package/dist/repo-manager.js.map +1 -0
  85. package/dist/router.d.ts +370 -0
  86. package/dist/router.d.ts.map +1 -0
  87. package/dist/router.js +1437 -0
  88. package/dist/router.js.map +1 -0
  89. package/dist/server.d.ts +174 -0
  90. package/dist/server.d.ts.map +1 -0
  91. package/dist/server.js +1001 -0
  92. package/dist/server.js.map +1 -0
  93. package/dist/spawn-manager.d.ts +78 -0
  94. package/dist/spawn-manager.d.ts.map +1 -0
  95. package/dist/spawn-manager.js +165 -0
  96. package/dist/spawn-manager.js.map +1 -0
  97. package/dist/sync-queue.d.ts +116 -0
  98. package/dist/sync-queue.d.ts.map +1 -0
  99. package/dist/sync-queue.js +361 -0
  100. package/dist/sync-queue.js.map +1 -0
  101. package/dist/types.d.ts +133 -0
  102. package/dist/types.d.ts.map +1 -0
  103. package/dist/types.js +6 -0
  104. package/dist/types.js.map +1 -0
  105. package/dist/workspace-manager.d.ts +80 -0
  106. package/dist/workspace-manager.d.ts.map +1 -0
  107. package/dist/workspace-manager.js +314 -0
  108. package/dist/workspace-manager.js.map +1 -0
  109. package/package.json +52 -0
@@ -0,0 +1,314 @@
1
+ /**
2
+ * Workspace Manager
3
+ * Manages multiple workspaces (repositories) and handles switching between them.
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { EventEmitter } from 'events';
8
+ import { execSync } from 'child_process';
9
+ import { createLogger } from '@agent-relay/resiliency';
10
+ const logger = createLogger('workspace-manager');
11
+ function generateId() {
12
+ return Math.random().toString(36).substring(2, 15);
13
+ }
14
+ export class WorkspaceManager extends EventEmitter {
15
+ workspaces = new Map();
16
+ activeWorkspaceId;
17
+ dataDir;
18
+ workspacesFile;
19
+ constructor(dataDir) {
20
+ super();
21
+ this.dataDir = dataDir;
22
+ this.workspacesFile = path.join(dataDir, 'workspaces.json');
23
+ // Ensure data directory exists
24
+ if (!fs.existsSync(dataDir)) {
25
+ fs.mkdirSync(dataDir, { recursive: true });
26
+ }
27
+ // Load existing workspaces
28
+ this.loadWorkspaces();
29
+ }
30
+ /**
31
+ * Add a new workspace
32
+ */
33
+ add(request) {
34
+ const resolvedPath = this.resolvePath(request.path);
35
+ // Check if already exists
36
+ const existing = this.findByPath(resolvedPath);
37
+ if (existing) {
38
+ logger.info('Workspace already exists', { id: existing.id, path: resolvedPath });
39
+ return existing;
40
+ }
41
+ // Validate path exists
42
+ if (!fs.existsSync(resolvedPath)) {
43
+ throw new Error(`Path does not exist: ${resolvedPath}`);
44
+ }
45
+ // Get git info
46
+ const gitInfo = this.getGitInfo(resolvedPath);
47
+ const workspace = {
48
+ id: generateId(),
49
+ name: request.name || path.basename(resolvedPath),
50
+ path: resolvedPath,
51
+ status: 'inactive',
52
+ provider: request.provider || this.detectProvider(resolvedPath),
53
+ createdAt: new Date(),
54
+ lastActiveAt: new Date(),
55
+ gitRemote: gitInfo.remote,
56
+ gitBranch: gitInfo.branch,
57
+ };
58
+ this.workspaces.set(workspace.id, workspace);
59
+ this.saveWorkspaces();
60
+ logger.info('Workspace added', { id: workspace.id, name: workspace.name, path: resolvedPath });
61
+ this.emitEvent({
62
+ type: 'workspace:added',
63
+ workspaceId: workspace.id,
64
+ data: workspace,
65
+ timestamp: new Date(),
66
+ });
67
+ return workspace;
68
+ }
69
+ /**
70
+ * Remove a workspace
71
+ */
72
+ remove(workspaceId) {
73
+ const workspace = this.workspaces.get(workspaceId);
74
+ if (!workspace) {
75
+ return false;
76
+ }
77
+ // If this is the active workspace, deactivate first
78
+ if (this.activeWorkspaceId === workspaceId) {
79
+ this.activeWorkspaceId = undefined;
80
+ }
81
+ // Clean up workspace temp directory if it exists
82
+ // (for workspace-namespaced paths: /tmp/relay/{workspaceId}/)
83
+ this.cleanupWorkspaceTempDir(workspaceId);
84
+ this.workspaces.delete(workspaceId);
85
+ this.saveWorkspaces();
86
+ logger.info('Workspace removed', { id: workspaceId, name: workspace.name });
87
+ this.emitEvent({
88
+ type: 'workspace:removed',
89
+ workspaceId,
90
+ data: { id: workspaceId, name: workspace.name },
91
+ timestamp: new Date(),
92
+ });
93
+ return true;
94
+ }
95
+ /**
96
+ * Switch to a workspace (set as active)
97
+ */
98
+ switchTo(workspaceId) {
99
+ const workspace = this.workspaces.get(workspaceId);
100
+ if (!workspace) {
101
+ throw new Error(`Workspace not found: ${workspaceId}`);
102
+ }
103
+ const previousId = this.activeWorkspaceId;
104
+ // Deactivate previous workspace
105
+ if (previousId && previousId !== workspaceId) {
106
+ const prev = this.workspaces.get(previousId);
107
+ if (prev) {
108
+ prev.status = 'inactive';
109
+ }
110
+ }
111
+ // Activate new workspace
112
+ workspace.status = 'active';
113
+ workspace.lastActiveAt = new Date();
114
+ this.activeWorkspaceId = workspaceId;
115
+ this.saveWorkspaces();
116
+ logger.info('Switched to workspace', { id: workspaceId, name: workspace.name });
117
+ this.emitEvent({
118
+ type: 'workspace:switched',
119
+ workspaceId,
120
+ data: { previousId, currentId: workspaceId, workspace },
121
+ timestamp: new Date(),
122
+ });
123
+ return workspace;
124
+ }
125
+ /**
126
+ * Get a workspace by ID
127
+ */
128
+ get(workspaceId) {
129
+ return this.workspaces.get(workspaceId);
130
+ }
131
+ /**
132
+ * Get the active workspace
133
+ */
134
+ getActive() {
135
+ if (!this.activeWorkspaceId)
136
+ return undefined;
137
+ return this.workspaces.get(this.activeWorkspaceId);
138
+ }
139
+ /**
140
+ * Get all workspaces
141
+ */
142
+ getAll() {
143
+ return Array.from(this.workspaces.values());
144
+ }
145
+ /**
146
+ * Find workspace by path
147
+ */
148
+ findByPath(workspacePath) {
149
+ const resolved = this.resolvePath(workspacePath);
150
+ return Array.from(this.workspaces.values()).find((w) => w.path === resolved);
151
+ }
152
+ /**
153
+ * Update workspace status
154
+ */
155
+ updateStatus(workspaceId, status) {
156
+ const workspace = this.workspaces.get(workspaceId);
157
+ if (!workspace)
158
+ return;
159
+ workspace.status = status;
160
+ this.saveWorkspaces();
161
+ this.emitEvent({
162
+ type: 'workspace:updated',
163
+ workspaceId,
164
+ data: { status },
165
+ timestamp: new Date(),
166
+ });
167
+ }
168
+ /**
169
+ * Update workspace git info
170
+ */
171
+ refreshGitInfo(workspaceId) {
172
+ const workspace = this.workspaces.get(workspaceId);
173
+ if (!workspace)
174
+ return;
175
+ const gitInfo = this.getGitInfo(workspace.path);
176
+ workspace.gitRemote = gitInfo.remote;
177
+ workspace.gitBranch = gitInfo.branch;
178
+ this.saveWorkspaces();
179
+ }
180
+ /**
181
+ * Resolve path (expand ~ and make absolute)
182
+ */
183
+ resolvePath(p) {
184
+ if (p.startsWith('~')) {
185
+ p = path.join(process.env.HOME || '', p.slice(1));
186
+ }
187
+ return path.resolve(p);
188
+ }
189
+ /**
190
+ * Detect provider from workspace files
191
+ */
192
+ detectProvider(workspacePath) {
193
+ // Check for CLAUDE.md or .claude directory
194
+ if (fs.existsSync(path.join(workspacePath, 'CLAUDE.md')) ||
195
+ fs.existsSync(path.join(workspacePath, '.claude'))) {
196
+ return 'claude';
197
+ }
198
+ // Check for .codex directory
199
+ if (fs.existsSync(path.join(workspacePath, '.codex'))) {
200
+ return 'codex';
201
+ }
202
+ // Check for .gemini directory
203
+ if (fs.existsSync(path.join(workspacePath, '.gemini'))) {
204
+ return 'gemini';
205
+ }
206
+ return 'generic';
207
+ }
208
+ /**
209
+ * Get git info for a workspace
210
+ */
211
+ getGitInfo(workspacePath) {
212
+ try {
213
+ const branch = execSync('git branch --show-current', {
214
+ cwd: workspacePath,
215
+ encoding: 'utf8',
216
+ stdio: ['pipe', 'pipe', 'pipe'],
217
+ }).trim();
218
+ let remote;
219
+ try {
220
+ remote = execSync('git remote get-url origin', {
221
+ cwd: workspacePath,
222
+ encoding: 'utf8',
223
+ stdio: ['pipe', 'pipe', 'pipe'],
224
+ }).trim();
225
+ }
226
+ catch {
227
+ // No remote configured
228
+ }
229
+ return { remote, branch };
230
+ }
231
+ catch {
232
+ // Not a git repo
233
+ return {};
234
+ }
235
+ }
236
+ /**
237
+ * Load workspaces from disk
238
+ */
239
+ loadWorkspaces() {
240
+ if (!fs.existsSync(this.workspacesFile)) {
241
+ return;
242
+ }
243
+ try {
244
+ const data = JSON.parse(fs.readFileSync(this.workspacesFile, 'utf8'));
245
+ if (Array.isArray(data.workspaces)) {
246
+ for (const w of data.workspaces) {
247
+ this.workspaces.set(w.id, {
248
+ ...w,
249
+ createdAt: new Date(w.createdAt),
250
+ lastActiveAt: new Date(w.lastActiveAt),
251
+ status: 'inactive', // Reset status on load
252
+ });
253
+ }
254
+ }
255
+ this.activeWorkspaceId = data.activeWorkspaceId;
256
+ logger.info('Loaded workspaces', { count: this.workspaces.size });
257
+ }
258
+ catch (err) {
259
+ logger.error('Failed to load workspaces', { error: String(err) });
260
+ }
261
+ }
262
+ /**
263
+ * Save workspaces to disk
264
+ */
265
+ saveWorkspaces() {
266
+ try {
267
+ const data = {
268
+ workspaces: Array.from(this.workspaces.values()),
269
+ activeWorkspaceId: this.activeWorkspaceId,
270
+ };
271
+ fs.writeFileSync(this.workspacesFile, JSON.stringify(data, null, 2));
272
+ }
273
+ catch (err) {
274
+ logger.error('Failed to save workspaces', { error: String(err) });
275
+ }
276
+ }
277
+ /**
278
+ * Emit a daemon event
279
+ */
280
+ emitEvent(event) {
281
+ this.emit('event', event);
282
+ }
283
+ /**
284
+ * Clean up workspace temp directory
285
+ * Removes /tmp/relay/{workspaceId}/ which contains sockets and outbox
286
+ */
287
+ cleanupWorkspaceTempDir(workspaceId) {
288
+ const workspaceTempDir = path.join('/tmp', 'relay', workspaceId);
289
+ try {
290
+ if (fs.existsSync(workspaceTempDir)) {
291
+ // Recursively remove the directory
292
+ fs.rmSync(workspaceTempDir, { recursive: true, force: true });
293
+ logger.info('Cleaned up workspace temp directory', { workspaceId, path: workspaceTempDir });
294
+ }
295
+ }
296
+ catch (err) {
297
+ // Log but don't fail - cleanup is best-effort
298
+ logger.warn('Failed to clean up workspace temp directory', {
299
+ workspaceId,
300
+ path: workspaceTempDir,
301
+ error: String(err),
302
+ });
303
+ }
304
+ }
305
+ }
306
+ let workspaceManagerInstance;
307
+ export function getWorkspaceManager(dataDir) {
308
+ if (!workspaceManagerInstance) {
309
+ const dir = dataDir || path.join(process.env.HOME || '', '.agent-relay', 'daemon');
310
+ workspaceManagerInstance = new WorkspaceManager(dir);
311
+ }
312
+ return workspaceManagerInstance;
313
+ }
314
+ //# sourceMappingURL=workspace-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-manager.js","sourceRoot":"","sources":["../src/workspace-manager.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@agent-relay/daemon",
3
+ "version": "0.1.0",
4
+ "description": "Relay daemon server - agent coordination and message routing",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "clean": "rm -rf dist",
21
+ "test": "vitest run",
22
+ "test:watch": "vitest"
23
+ },
24
+ "dependencies": {
25
+ "@agent-relay/protocol": "^0.1.2",
26
+ "@agent-relay/config": "^0.1.0",
27
+ "@agent-relay/storage": "^0.1.0",
28
+ "@agent-relay/bridge": "^0.1.0",
29
+ "@agent-relay/utils": "^0.1.0",
30
+ "@agent-relay/policy": "^0.1.0",
31
+ "@agent-relay/memory": "^0.1.0",
32
+ "@agent-relay/resiliency": "^0.1.0",
33
+ "@agent-relay/user-directory": "^0.1.0",
34
+ "@agent-relay/wrapper": "^0.1.0",
35
+ "ws": "^8.18.3",
36
+ "better-sqlite3": "^12.6.2",
37
+ "pg": "^8.16.3",
38
+ "uuid": "^10.0.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/better-sqlite3": "^7.6.13",
42
+ "@types/node": "^22.19.3",
43
+ "@types/pg": "^8.16.0",
44
+ "@types/uuid": "^10.0.0",
45
+ "@types/ws": "^8.18.1",
46
+ "typescript": "^5.9.3",
47
+ "vitest": "^3.2.4"
48
+ },
49
+ "publishConfig": {
50
+ "access": "public"
51
+ }
52
+ }