agent-relay 0.1.0 → 1.0.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 (86) hide show
  1. package/README.md +56 -730
  2. package/dist/cli/index.d.ts +6 -1
  3. package/dist/cli/index.d.ts.map +1 -1
  4. package/dist/cli/index.js +109 -1521
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/daemon/server.d.ts +8 -1
  7. package/dist/daemon/server.d.ts.map +1 -1
  8. package/dist/daemon/server.js +23 -7
  9. package/dist/daemon/server.js.map +1 -1
  10. package/dist/index.d.ts +0 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +0 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/storage/adapter.d.ts +43 -0
  15. package/dist/storage/adapter.d.ts.map +1 -1
  16. package/dist/storage/adapter.js +105 -1
  17. package/dist/storage/adapter.js.map +1 -1
  18. package/dist/storage/sqlite-adapter.d.ts +1 -0
  19. package/dist/storage/sqlite-adapter.d.ts.map +1 -1
  20. package/dist/storage/sqlite-adapter.js +26 -0
  21. package/dist/storage/sqlite-adapter.js.map +1 -1
  22. package/dist/utils/project-namespace.d.ts +46 -0
  23. package/dist/utils/project-namespace.d.ts.map +1 -0
  24. package/dist/utils/project-namespace.js +111 -0
  25. package/dist/utils/project-namespace.js.map +1 -0
  26. package/dist/wrapper/client.d.ts +1 -1
  27. package/dist/wrapper/client.d.ts.map +1 -1
  28. package/dist/wrapper/client.js +1 -1
  29. package/dist/wrapper/client.js.map +1 -1
  30. package/dist/wrapper/index.d.ts +0 -1
  31. package/dist/wrapper/index.d.ts.map +1 -1
  32. package/dist/wrapper/index.js +2 -3
  33. package/dist/wrapper/index.js.map +1 -1
  34. package/dist/wrapper/tmux-wrapper.d.ts +5 -0
  35. package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
  36. package/dist/wrapper/tmux-wrapper.js +94 -19
  37. package/dist/wrapper/tmux-wrapper.js.map +1 -1
  38. package/docs/AGENTS.md +386 -0
  39. package/docs/CLI-SIMPLIFICATION-COMPLETE.md +48 -0
  40. package/docs/CONTRIBUTING.md +151 -0
  41. package/docs/TMUX_IMPLEMENTATION_NOTES.md +364 -0
  42. package/docs/removable-code-analysis.md +24 -0
  43. package/install.sh +10 -2
  44. package/package.json +3 -4
  45. package/dist/games/index.d.ts +0 -2
  46. package/dist/games/index.d.ts.map +0 -1
  47. package/dist/games/index.js +0 -2
  48. package/dist/games/index.js.map +0 -1
  49. package/dist/games/tictactoe.d.ts +0 -24
  50. package/dist/games/tictactoe.d.ts.map +0 -1
  51. package/dist/games/tictactoe.js +0 -160
  52. package/dist/games/tictactoe.js.map +0 -1
  53. package/dist/supervisor/inbox.d.ts +0 -38
  54. package/dist/supervisor/inbox.d.ts.map +0 -1
  55. package/dist/supervisor/inbox.js +0 -162
  56. package/dist/supervisor/inbox.js.map +0 -1
  57. package/dist/supervisor/index.d.ts +0 -10
  58. package/dist/supervisor/index.d.ts.map +0 -1
  59. package/dist/supervisor/index.js +0 -10
  60. package/dist/supervisor/index.js.map +0 -1
  61. package/dist/supervisor/spawner.d.ts +0 -54
  62. package/dist/supervisor/spawner.d.ts.map +0 -1
  63. package/dist/supervisor/spawner.js +0 -282
  64. package/dist/supervisor/spawner.js.map +0 -1
  65. package/dist/supervisor/state.d.ts +0 -132
  66. package/dist/supervisor/state.d.ts.map +0 -1
  67. package/dist/supervisor/state.js +0 -465
  68. package/dist/supervisor/state.js.map +0 -1
  69. package/dist/supervisor/supervisor.d.ts +0 -67
  70. package/dist/supervisor/supervisor.d.ts.map +0 -1
  71. package/dist/supervisor/supervisor.js +0 -263
  72. package/dist/supervisor/supervisor.js.map +0 -1
  73. package/dist/supervisor/types.d.ts +0 -139
  74. package/dist/supervisor/types.d.ts.map +0 -1
  75. package/dist/supervisor/types.js +0 -12
  76. package/dist/supervisor/types.js.map +0 -1
  77. package/dist/webhook/spawner.d.ts +0 -79
  78. package/dist/webhook/spawner.d.ts.map +0 -1
  79. package/dist/webhook/spawner.js +0 -288
  80. package/dist/webhook/spawner.js.map +0 -1
  81. package/dist/wrapper/pty-wrapper.d.ts +0 -125
  82. package/dist/wrapper/pty-wrapper.d.ts.map +0 -1
  83. package/dist/wrapper/pty-wrapper.js +0 -494
  84. package/dist/wrapper/pty-wrapper.js.map +0 -1
  85. /package/{CHANGELOG.md → docs/CHANGELOG.md} +0 -0
  86. /package/{PROTOCOL.md → docs/PROTOCOL.md} +0 -0
@@ -1,132 +0,0 @@
1
- /**
2
- * Agent State Management
3
- *
4
- * Handles persistent state for spawn-per-message architecture.
5
- * Each agent has a state.json that maintains context across spawns.
6
- */
7
- import type { AgentState, RelayExchange, CLIType, SupervisorConfig } from './types.js';
8
- /**
9
- * State Manager for a single agent
10
- */
11
- export declare class StateManager {
12
- private statePath;
13
- private lockPath;
14
- private config;
15
- private agentName;
16
- constructor(agentName: string, config: SupervisorConfig);
17
- /**
18
- * Initialize state directory
19
- */
20
- ensureDir(): void;
21
- /**
22
- * Check if state file exists
23
- */
24
- exists(): boolean;
25
- /**
26
- * Load agent state from disk
27
- */
28
- load(): AgentState | null;
29
- /**
30
- * Save agent state to disk
31
- */
32
- save(state: AgentState): void;
33
- /**
34
- * Create initial state for a new agent
35
- */
36
- create(cli: CLIType, cwd: string, customCommand?: string): AgentState;
37
- /**
38
- * Update state with a new relay exchange
39
- */
40
- addExchange(state: AgentState, exchange: RelayExchange): AgentState;
41
- /**
42
- * Update the rolling summary
43
- */
44
- updateSummary(state: AgentState, newSummary: string): AgentState;
45
- /**
46
- * Update supervisor-tracked status for the agent.
47
- */
48
- setStatus(state: AgentState, status: NonNullable<AgentState['status']>): AgentState;
49
- /**
50
- * Parse inbox content and record received exchanges into state.
51
- */
52
- recordInboxReceived(state: AgentState, inboxContent: string): AgentState;
53
- /**
54
- * Mark inbox as processed (for restart deduplication)
55
- */
56
- markInboxProcessed(state: AgentState, timestamp?: string): AgentState;
57
- /**
58
- * Check if messages should be skipped based on timestamp
59
- * Returns true if the message timestamp is older than lastProcessedInboxTs
60
- */
61
- shouldSkipMessage(state: AgentState, messageTs: string): boolean;
62
- /**
63
- * Add a decision (append-only)
64
- */
65
- addDecision(state: AgentState, what: string, why: string): AgentState;
66
- /**
67
- * Add a TODO item
68
- */
69
- addTodo(state: AgentState, task: string, priority?: 'high' | 'normal' | 'low', owner?: string): AgentState;
70
- /**
71
- * Complete (remove) a TODO item by task text match
72
- */
73
- completeTodo(state: AgentState, taskMatch: string): AgentState;
74
- /**
75
- * Record a file modification
76
- */
77
- addFileModification(state: AgentState, filePath: string, intent: string): AgentState;
78
- /**
79
- * Record an external command/reference
80
- */
81
- addExternalRef(state: AgentState, command: string, resultSummary: string, logPath?: string): AgentState;
82
- /**
83
- * Migrate old state to current version
84
- */
85
- migrateState(state: AgentState): AgentState;
86
- /**
87
- * Try to acquire lock for this agent
88
- * Returns true if lock acquired, false if already locked
89
- */
90
- tryLock(): boolean;
91
- /**
92
- * Release lock for this agent
93
- */
94
- releaseLock(): void;
95
- /**
96
- * Check if agent is currently locked
97
- */
98
- isLocked(): boolean;
99
- /**
100
- * Get the inbox path for this agent
101
- */
102
- getInboxPath(): string;
103
- /**
104
- * Get the state.json path for this agent
105
- */
106
- getStatePath(): string;
107
- /**
108
- * Get the lock path for this agent
109
- */
110
- getLockPath(): string;
111
- /**
112
- * Build the initial prompt for a spawn including state context
113
- */
114
- buildSpawnPrompt(state: AgentState, inboxContent: string): string;
115
- }
116
- /**
117
- * Global state registry for all agents
118
- */
119
- export declare class StateRegistry {
120
- private config;
121
- private managers;
122
- constructor(config: SupervisorConfig);
123
- /**
124
- * Get or create state manager for an agent
125
- */
126
- getManager(agentName: string): StateManager;
127
- /**
128
- * List all registered agents (from disk)
129
- */
130
- listAgents(): string[];
131
- }
132
- //# sourceMappingURL=state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/supervisor/state.ts"],"names":[],"mappings":"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"}
@@ -1,465 +0,0 @@
1
- /**
2
- * Agent State Management
3
- *
4
- * Handles persistent state for spawn-per-message architecture.
5
- * Each agent has a state.json that maintains context across spawns.
6
- */
7
- import fs from 'node:fs';
8
- import path from 'node:path';
9
- import { parseInboxMarkdown } from './inbox.js';
10
- /** Current state schema version */
11
- const STATE_VERSION = 1;
12
- /**
13
- * State Manager for a single agent
14
- */
15
- export class StateManager {
16
- statePath;
17
- lockPath;
18
- config;
19
- agentName;
20
- constructor(agentName, config) {
21
- this.agentName = agentName;
22
- this.config = config;
23
- const agentDir = path.join(config.dataDir, agentName);
24
- this.statePath = path.join(agentDir, 'state.json');
25
- this.lockPath = path.join(agentDir, 'agent.lock');
26
- }
27
- /**
28
- * Initialize state directory
29
- */
30
- ensureDir() {
31
- const dir = path.dirname(this.statePath);
32
- if (!fs.existsSync(dir)) {
33
- fs.mkdirSync(dir, { recursive: true });
34
- }
35
- }
36
- /**
37
- * Check if state file exists
38
- */
39
- exists() {
40
- return fs.existsSync(this.statePath);
41
- }
42
- /**
43
- * Load agent state from disk
44
- */
45
- load() {
46
- if (!this.exists()) {
47
- return null;
48
- }
49
- try {
50
- const content = fs.readFileSync(this.statePath, 'utf-8');
51
- const state = JSON.parse(content);
52
- // Migrate older state formats
53
- return this.migrateState(state);
54
- }
55
- catch (err) {
56
- console.error(`[state] Failed to load state for ${this.agentName}:`, err);
57
- return null;
58
- }
59
- }
60
- /**
61
- * Save agent state to disk
62
- */
63
- save(state) {
64
- this.ensureDir();
65
- const tmpPath = `${this.statePath}.tmp`;
66
- fs.writeFileSync(tmpPath, JSON.stringify(state, null, 2), 'utf-8');
67
- fs.renameSync(tmpPath, this.statePath);
68
- }
69
- /**
70
- * Create initial state for a new agent
71
- */
72
- create(cli, cwd, customCommand) {
73
- const now = new Date().toISOString();
74
- const state = {
75
- version: STATE_VERSION,
76
- name: this.agentName,
77
- cli,
78
- summary: '',
79
- recentMessages: [],
80
- cwd,
81
- customCommand,
82
- lastActiveTs: now,
83
- createdTs: now,
84
- status: 'idle',
85
- decisions: [],
86
- openTodos: [],
87
- filesModified: [],
88
- externalRefs: [],
89
- };
90
- this.save(state);
91
- return state;
92
- }
93
- /**
94
- * Update state with a new relay exchange
95
- */
96
- addExchange(state, exchange) {
97
- const updated = { ...state };
98
- updated.recentMessages = [
99
- ...state.recentMessages,
100
- exchange,
101
- ].slice(-this.config.maxRecentMessages);
102
- updated.lastActiveTs = new Date().toISOString();
103
- this.save(updated);
104
- return updated;
105
- }
106
- /**
107
- * Update the rolling summary
108
- */
109
- updateSummary(state, newSummary) {
110
- const updated = { ...state };
111
- // Truncate if too long
112
- updated.summary = newSummary.length > this.config.maxSummaryLength
113
- ? newSummary.substring(0, this.config.maxSummaryLength) + '...'
114
- : newSummary;
115
- updated.lastActiveTs = new Date().toISOString();
116
- this.save(updated);
117
- return updated;
118
- }
119
- /**
120
- * Update supervisor-tracked status for the agent.
121
- */
122
- setStatus(state, status) {
123
- const updated = { ...state, status };
124
- updated.lastActiveTs = new Date().toISOString();
125
- this.save(updated);
126
- return updated;
127
- }
128
- /**
129
- * Parse inbox content and record received exchanges into state.
130
- */
131
- recordInboxReceived(state, inboxContent) {
132
- const messages = parseInboxMarkdown(inboxContent);
133
- let updated = state;
134
- for (const msg of messages) {
135
- updated = this.addExchange(updated, {
136
- direction: 'received',
137
- peer: msg.from,
138
- body: msg.body,
139
- timestamp: msg.timestamp || new Date().toISOString(),
140
- });
141
- }
142
- return updated;
143
- }
144
- /**
145
- * Mark inbox as processed (for restart deduplication)
146
- */
147
- markInboxProcessed(state, timestamp) {
148
- const updated = { ...state };
149
- updated.lastProcessedInboxTs = timestamp || new Date().toISOString();
150
- updated.lastActiveTs = new Date().toISOString();
151
- this.save(updated);
152
- return updated;
153
- }
154
- /**
155
- * Check if messages should be skipped based on timestamp
156
- * Returns true if the message timestamp is older than lastProcessedInboxTs
157
- */
158
- shouldSkipMessage(state, messageTs) {
159
- if (!state.lastProcessedInboxTs)
160
- return false;
161
- return new Date(messageTs) <= new Date(state.lastProcessedInboxTs);
162
- }
163
- /**
164
- * Add a decision (append-only)
165
- */
166
- addDecision(state, what, why) {
167
- const updated = { ...state };
168
- updated.decisions = [
169
- ...state.decisions,
170
- {
171
- what,
172
- why,
173
- timestamp: new Date().toISOString(),
174
- },
175
- ];
176
- updated.lastActiveTs = new Date().toISOString();
177
- this.save(updated);
178
- return updated;
179
- }
180
- /**
181
- * Add a TODO item
182
- */
183
- addTodo(state, task, priority = 'normal', owner) {
184
- const updated = { ...state };
185
- updated.openTodos = [
186
- ...state.openTodos,
187
- {
188
- task,
189
- owner,
190
- priority,
191
- addedTs: new Date().toISOString(),
192
- },
193
- ];
194
- updated.lastActiveTs = new Date().toISOString();
195
- this.save(updated);
196
- return updated;
197
- }
198
- /**
199
- * Complete (remove) a TODO item by task text match
200
- */
201
- completeTodo(state, taskMatch) {
202
- const updated = { ...state };
203
- updated.openTodos = state.openTodos.filter((todo) => !todo.task.toLowerCase().includes(taskMatch.toLowerCase()));
204
- updated.lastActiveTs = new Date().toISOString();
205
- this.save(updated);
206
- return updated;
207
- }
208
- /**
209
- * Record a file modification
210
- */
211
- addFileModification(state, filePath, intent) {
212
- const updated = { ...state };
213
- // Replace existing entry for same path or append
214
- const existing = state.filesModified.findIndex((f) => f.path === filePath);
215
- if (existing >= 0) {
216
- updated.filesModified = [...state.filesModified];
217
- updated.filesModified[existing] = {
218
- path: filePath,
219
- intent,
220
- timestamp: new Date().toISOString(),
221
- };
222
- }
223
- else {
224
- updated.filesModified = [
225
- ...state.filesModified,
226
- {
227
- path: filePath,
228
- intent,
229
- timestamp: new Date().toISOString(),
230
- },
231
- ];
232
- }
233
- updated.lastActiveTs = new Date().toISOString();
234
- this.save(updated);
235
- return updated;
236
- }
237
- /**
238
- * Record an external command/reference
239
- */
240
- addExternalRef(state, command, resultSummary, logPath) {
241
- const updated = { ...state };
242
- const maxRefs = 20; // Keep bounded
243
- updated.externalRefs = [
244
- ...state.externalRefs.slice(-maxRefs + 1),
245
- {
246
- command,
247
- resultSummary,
248
- timestamp: new Date().toISOString(),
249
- logPath,
250
- },
251
- ];
252
- updated.lastActiveTs = new Date().toISOString();
253
- this.save(updated);
254
- return updated;
255
- }
256
- /**
257
- * Migrate old state to current version
258
- */
259
- migrateState(state) {
260
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
261
- const s = state;
262
- if (!s.version || s.version < STATE_VERSION) {
263
- // Add missing fields from v1
264
- s.version = STATE_VERSION;
265
- s.status = s.status || 'idle';
266
- s.decisions = s.decisions || [];
267
- s.openTodos = s.openTodos || [];
268
- s.filesModified = s.filesModified || [];
269
- s.externalRefs = s.externalRefs || [];
270
- this.save(s);
271
- }
272
- return s;
273
- }
274
- /**
275
- * Try to acquire lock for this agent
276
- * Returns true if lock acquired, false if already locked
277
- */
278
- tryLock() {
279
- this.ensureDir();
280
- try {
281
- // Try to create lock file exclusively
282
- const fd = fs.openSync(this.lockPath, 'wx');
283
- fs.writeSync(fd, `${process.pid}\n${new Date().toISOString()}\n`);
284
- fs.closeSync(fd);
285
- return true;
286
- }
287
- catch (err) {
288
- if (err.code === 'EEXIST') {
289
- // Lock exists, check if stale (older than 5 minutes)
290
- try {
291
- const stat = fs.statSync(this.lockPath);
292
- const age = Date.now() - stat.mtimeMs;
293
- if (age > 5 * 60 * 1000) {
294
- // Stale lock, remove and retry
295
- fs.unlinkSync(this.lockPath);
296
- return this.tryLock();
297
- }
298
- }
299
- catch {
300
- // Ignore stat errors
301
- }
302
- return false;
303
- }
304
- throw err;
305
- }
306
- }
307
- /**
308
- * Release lock for this agent
309
- */
310
- releaseLock() {
311
- try {
312
- if (fs.existsSync(this.lockPath)) {
313
- fs.unlinkSync(this.lockPath);
314
- }
315
- }
316
- catch (err) {
317
- console.error(`[state] Failed to release lock for ${this.agentName}:`, err);
318
- }
319
- }
320
- /**
321
- * Check if agent is currently locked
322
- */
323
- isLocked() {
324
- if (!fs.existsSync(this.lockPath)) {
325
- return false;
326
- }
327
- // Check for stale lock
328
- try {
329
- const stat = fs.statSync(this.lockPath);
330
- const age = Date.now() - stat.mtimeMs;
331
- if (age > 5 * 60 * 1000) {
332
- // Stale, consider unlocked
333
- return false;
334
- }
335
- return true;
336
- }
337
- catch {
338
- return false;
339
- }
340
- }
341
- /**
342
- * Get the inbox path for this agent
343
- */
344
- getInboxPath() {
345
- return path.join(this.config.dataDir, this.agentName, 'inbox.md');
346
- }
347
- /**
348
- * Get the state.json path for this agent
349
- */
350
- getStatePath() {
351
- return this.statePath;
352
- }
353
- /**
354
- * Get the lock path for this agent
355
- */
356
- getLockPath() {
357
- return this.lockPath;
358
- }
359
- /**
360
- * Build the initial prompt for a spawn including state context
361
- */
362
- buildSpawnPrompt(state, inboxContent) {
363
- let prompt = '';
364
- prompt += `You are ${state.name}, an AI agent collaborating with other CLI agents via agent-relay.\n`;
365
- prompt += `Your job: read new relay messages and respond using @relay:AgentName <message>.\n`;
366
- prompt += `\nCRITICAL: Do not wait for additional input. Process ALL messages and then exit.\n\n`;
367
- // Add summary if present
368
- if (state.summary) {
369
- prompt += `## Context\n${state.summary}\n\n`;
370
- }
371
- // Add key decisions (stable context)
372
- if (state.decisions.length > 0) {
373
- prompt += `## Key Decisions Made\n`;
374
- for (const decision of state.decisions.slice(-10)) {
375
- prompt += `- **${decision.what}**: ${decision.why}\n`;
376
- }
377
- prompt += '\n';
378
- }
379
- // Add open TODOs
380
- if (state.openTodos.length > 0) {
381
- prompt += `## Open TODOs\n`;
382
- for (const todo of state.openTodos) {
383
- const priority = todo.priority === 'high' ? '[HIGH]' : todo.priority === 'low' ? '[low]' : '';
384
- const owner = todo.owner ? ` (${todo.owner})` : '';
385
- prompt += `- ${priority} ${todo.task}${owner}\n`;
386
- }
387
- prompt += '\n';
388
- }
389
- // Add files modified (for context on what we've touched)
390
- if (state.filesModified.length > 0) {
391
- prompt += `## Files Modified This Session\n`;
392
- for (const file of state.filesModified.slice(-10)) {
393
- prompt += `- \`${file.path}\`: ${file.intent}\n`;
394
- }
395
- prompt += '\n';
396
- }
397
- // Add recent external command references
398
- if (state.externalRefs.length > 0) {
399
- prompt += `## Recent Commands/Outputs\n`;
400
- for (const ref of state.externalRefs.slice(-5)) {
401
- prompt += `- \`${ref.command}\`: ${ref.resultSummary}\n`;
402
- }
403
- prompt += '\n';
404
- }
405
- // Add recent exchanges
406
- if (state.recentMessages.length > 0) {
407
- prompt += `## Recent Conversation\n`;
408
- for (const exchange of state.recentMessages.slice(-10)) {
409
- const direction = exchange.direction === 'sent' ? '→' : '←';
410
- prompt += `[${exchange.timestamp}] ${direction} ${exchange.peer}: ${exchange.body}\n`;
411
- }
412
- prompt += '\n';
413
- }
414
- // Add inbox content
415
- prompt += `## New Messages To Process\n${inboxContent}\n\n`;
416
- // Add instructions
417
- prompt += `## Instructions\n`;
418
- prompt += `1. Read and understand each new message\n`;
419
- prompt += `2. Respond using: @relay:AgentName Your reply\n`;
420
- prompt += `3. When finished processing all messages, EXIT (do not wait)\n\n`;
421
- prompt += `## Context Preservation\n`;
422
- prompt += `After you respond, output an updated compact summary so future spawns keep context:\n`;
423
- prompt += `[[SUMMARY]]<~1-2k chars: current goals, key decisions, current state, next steps>[[/SUMMARY]]\n\n`;
424
- prompt += `Optional structured markers (only if helpful):\n`;
425
- prompt += `- [[DECISION]]{\"what\":\"...\",\"why\":\"...\"}[[/DECISION]]\n`;
426
- prompt += `- [[TODO]]{\"task\":\"...\",\"priority\":\"high|normal|low\",\"owner\":\"?\"}[[/TODO]]\n`;
427
- prompt += `- [[DONE]]task substring[[/DONE]]\n`;
428
- return prompt;
429
- }
430
- }
431
- /**
432
- * Global state registry for all agents
433
- */
434
- export class StateRegistry {
435
- config;
436
- managers = new Map();
437
- constructor(config) {
438
- this.config = config;
439
- }
440
- /**
441
- * Get or create state manager for an agent
442
- */
443
- getManager(agentName) {
444
- let manager = this.managers.get(agentName);
445
- if (!manager) {
446
- manager = new StateManager(agentName, this.config);
447
- this.managers.set(agentName, manager);
448
- }
449
- return manager;
450
- }
451
- /**
452
- * List all registered agents (from disk)
453
- */
454
- listAgents() {
455
- if (!fs.existsSync(this.config.dataDir)) {
456
- return [];
457
- }
458
- const entries = fs.readdirSync(this.config.dataDir, { withFileTypes: true });
459
- return entries
460
- .filter(e => e.isDirectory())
461
- .filter(e => fs.existsSync(path.join(this.config.dataDir, e.name, 'state.json')))
462
- .map(e => e.name);
463
- }
464
- }
465
- //# sourceMappingURL=state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/supervisor/state.ts"],"names":[],"mappings":"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"}
@@ -1,67 +0,0 @@
1
- /**
2
- * Agent Relay Supervisor
3
- *
4
- * Main supervisor loop that:
5
- * 1. Watches registered agents for inbox messages
6
- * 2. Spawns fresh CLI runs when messages arrive
7
- * 3. Captures output and routes relay commands
8
- * 4. Updates agent state for context preservation
9
- */
10
- import type { SupervisorConfig, AgentRegistration, AgentState } from './types.js';
11
- export declare class Supervisor {
12
- private config;
13
- private registry;
14
- private spawner;
15
- private client;
16
- private running;
17
- private pollTimer?;
18
- constructor(config?: Partial<SupervisorConfig>);
19
- /**
20
- * Start the supervisor
21
- */
22
- start(): Promise<void>;
23
- /**
24
- * Stop the supervisor
25
- */
26
- stop(): void;
27
- /**
28
- * Register a new agent
29
- */
30
- registerAgent(registration: AgentRegistration): AgentState;
31
- /**
32
- * Unregister an agent
33
- */
34
- unregisterAgent(name: string): void;
35
- /**
36
- * Schedule next poll
37
- */
38
- private schedulePoll;
39
- /**
40
- * Poll all agents for new messages
41
- */
42
- private poll;
43
- /**
44
- * Process a single agent's inbox
45
- */
46
- private processAgent;
47
- /**
48
- * Get list of registered agents
49
- */
50
- getAgents(): string[];
51
- /**
52
- * Get agent state
53
- */
54
- getAgentState(name: string): AgentState | null;
55
- /**
56
- * Get lightweight diagnostics for CLI display.
57
- */
58
- getAgentDiagnostics(name: string): {
59
- state: AgentState | null;
60
- locked: boolean;
61
- inboxPath: string;
62
- statePath: string;
63
- lockPath: string;
64
- hasUnreadInbox: boolean;
65
- };
66
- }
67
- //# sourceMappingURL=supervisor.d.ts.map