agent-relay 2.2.21 → 2.2.24

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 (43) hide show
  1. package/dist/index.cjs +199 -3
  2. package/dist/src/cli/index.js +445 -293
  3. package/dist/src/cli/index.js.map +1 -1
  4. package/package.json +18 -18
  5. package/packages/acp-bridge/package.json +2 -2
  6. package/packages/api-types/package.json +1 -1
  7. package/packages/benchmark/package.json +5 -5
  8. package/packages/bridge/package.json +7 -7
  9. package/packages/cli-tester/package.json +1 -1
  10. package/packages/config/package.json +2 -2
  11. package/packages/continuity/package.json +2 -2
  12. package/packages/daemon/dist/cloud-sync.d.ts +13 -1
  13. package/packages/daemon/dist/cloud-sync.d.ts.map +1 -1
  14. package/packages/daemon/dist/cloud-sync.js +169 -5
  15. package/packages/daemon/dist/cloud-sync.js.map +1 -1
  16. package/packages/daemon/dist/server.d.ts +5 -0
  17. package/packages/daemon/dist/server.d.ts.map +1 -1
  18. package/packages/daemon/dist/server.js +50 -0
  19. package/packages/daemon/dist/server.js.map +1 -1
  20. package/packages/daemon/package.json +12 -12
  21. package/packages/daemon/src/cloud-sync.ts +201 -5
  22. package/packages/daemon/src/server.ts +61 -0
  23. package/packages/hooks/package.json +4 -4
  24. package/packages/mcp/package.json +5 -5
  25. package/packages/memory/package.json +2 -2
  26. package/packages/policy/package.json +2 -2
  27. package/packages/protocol/package.json +1 -1
  28. package/packages/resiliency/package.json +1 -1
  29. package/packages/sdk/dist/client.d.ts +1 -1
  30. package/packages/sdk/dist/client.js +2 -2
  31. package/packages/sdk/package.json +3 -3
  32. package/packages/sdk/src/client.ts +2 -2
  33. package/packages/spawner/package.json +1 -1
  34. package/packages/state/package.json +1 -1
  35. package/packages/storage/package.json +2 -2
  36. package/packages/telemetry/package.json +1 -1
  37. package/packages/trajectory/package.json +2 -2
  38. package/packages/user-directory/package.json +2 -2
  39. package/packages/utils/package.json +3 -3
  40. package/packages/wrapper/dist/client.js +1 -1
  41. package/packages/wrapper/package.json +6 -6
  42. package/packages/wrapper/src/client.test.ts +1 -1
  43. package/packages/wrapper/src/client.ts +1 -1
@@ -786,6 +786,12 @@ export class Daemon {
786
786
  to: msg.to,
787
787
  });
788
788
 
789
+ // Handle spawn commands from cloud
790
+ if (msg.to === '__spawner__' && msg.metadata?.type === 'spawn_command') {
791
+ this.handleCloudSpawnCommand(msg);
792
+ return;
793
+ }
794
+
789
795
  // Find local agent
790
796
  const targetConnection = Array.from(this.connections).find(
791
797
  c => c.agentName === msg.to
@@ -819,6 +825,61 @@ export class Daemon {
819
825
  this.router.route(targetConnection, envelope);
820
826
  }
821
827
 
828
+ /**
829
+ * Handle a spawn command received from the cloud (e.g., Slack orchestrator).
830
+ * Parses the spawn_agent command and uses SpawnManager to spawn the agent locally.
831
+ */
832
+ private async handleCloudSpawnCommand(msg: CrossMachineMessage): Promise<void> {
833
+ if (!this.spawnManager) {
834
+ log.warn('Cannot handle cloud spawn command: SpawnManager not enabled');
835
+ return;
836
+ }
837
+
838
+ try {
839
+ const command = JSON.parse(msg.content) as {
840
+ type: string;
841
+ agentName: string;
842
+ cli: string;
843
+ task?: string;
844
+ metadata?: Record<string, unknown>;
845
+ };
846
+
847
+ if (command.type !== 'spawn_agent') {
848
+ log.warn('Unknown cloud spawn command type', { type: command.type });
849
+ return;
850
+ }
851
+
852
+ log.info('Spawning agent from cloud command', {
853
+ name: command.agentName,
854
+ cli: command.cli,
855
+ source: msg.from.agent,
856
+ });
857
+
858
+ const spawner = this.spawnManager.getSpawner();
859
+ const result = await spawner.spawn({
860
+ name: command.agentName,
861
+ cli: command.cli,
862
+ task: command.task || 'You were spawned by the cloud orchestrator. Check your inbox for messages.',
863
+ spawnerName: msg.from.agent,
864
+ });
865
+
866
+ if (result.success) {
867
+ log.info('Cloud-spawned agent started', {
868
+ name: command.agentName,
869
+ pid: result.pid,
870
+ });
871
+ } else {
872
+ log.error('Cloud spawn failed', {
873
+ name: command.agentName,
874
+ error: result.error,
875
+ });
876
+ }
877
+ } catch (err: unknown) {
878
+ const error = err instanceof Error ? err.message : String(err);
879
+ log.error('Failed to parse cloud spawn command', { error });
880
+ }
881
+ }
882
+
822
883
  /**
823
884
  * Send message to agent on another machine via cloud.
824
885
  */
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/hooks",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "Hook emitter, registry, and trajectory hooks for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -37,9 +37,9 @@
37
37
  "test:watch": "vitest"
38
38
  },
39
39
  "dependencies": {
40
- "@agent-relay/protocol": "2.2.21",
41
- "@agent-relay/config": "2.2.21",
42
- "@agent-relay/trajectory": "2.2.21"
40
+ "@agent-relay/protocol": "2.2.24",
41
+ "@agent-relay/config": "2.2.24",
42
+ "@agent-relay/trajectory": "2.2.24"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/mcp",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "MCP server for Agent Relay - native messaging tools for AI agents in Claude, Cursor, and VS Code",
5
5
  "author": "Agent Workforce Inc.",
6
6
  "license": "Apache-2.0",
@@ -47,15 +47,15 @@
47
47
  "prepublishOnly": "npm run clean && npm run build && npm test"
48
48
  },
49
49
  "dependencies": {
50
- "@agent-relay/config": "2.2.21",
51
- "@agent-relay/protocol": "2.2.21",
52
- "@agent-relay/utils": "2.2.21",
50
+ "@agent-relay/config": "2.2.24",
51
+ "@agent-relay/protocol": "2.2.24",
52
+ "@agent-relay/utils": "2.2.24",
53
53
  "@modelcontextprotocol/sdk": "^1.0.0",
54
54
  "smol-toml": "^1.6.0",
55
55
  "zod": "^3.23.8"
56
56
  },
57
57
  "devDependencies": {
58
- "@agent-relay/sdk": "2.2.21",
58
+ "@agent-relay/sdk": "2.2.24",
59
59
  "@types/node": "^22.19.3",
60
60
  "typescript": "^5.9.3",
61
61
  "vitest": "^2.1.9"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/memory",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "Semantic memory storage and retrieval system for agent-relay with multiple backend support",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/hooks": "2.2.21"
25
+ "@agent-relay/hooks": "2.2.24"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/policy",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "Agent policy management with multi-level fallback (repo, local PRPM, cloud workspace)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/config": "2.2.21"
25
+ "@agent-relay/config": "2.2.24"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/protocol",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "Wire protocol types and framing for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/resiliency",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "Health monitoring, logging, metrics, and crash resilience utilities for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -245,7 +245,7 @@ export declare class RelayClient {
245
245
  * @param options.shadowSpeakOn - Shadow speak-on triggers
246
246
  * @param options.waitForReady - Wait for the agent to be ready before resolving (default: false)
247
247
  * @param options.readyTimeoutMs - Timeout for agent to become ready (default: 60000ms)
248
- * @param timeoutMs - Timeout for spawn operation (default: 30000ms)
248
+ * @param timeoutMs - Timeout for spawn operation (default: 60000ms)
249
249
  * @returns Spawn result. When waitForReady is true, includes `ready` and `readyInfo` fields.
250
250
  */
251
251
  spawn(options: {
@@ -513,10 +513,10 @@ export class RelayClient {
513
513
  * @param options.shadowSpeakOn - Shadow speak-on triggers
514
514
  * @param options.waitForReady - Wait for the agent to be ready before resolving (default: false)
515
515
  * @param options.readyTimeoutMs - Timeout for agent to become ready (default: 60000ms)
516
- * @param timeoutMs - Timeout for spawn operation (default: 30000ms)
516
+ * @param timeoutMs - Timeout for spawn operation (default: 60000ms)
517
517
  * @returns Spawn result. When waitForReady is true, includes `ready` and `readyInfo` fields.
518
518
  */
519
- async spawn(options, timeoutMs = 30000) {
519
+ async spawn(options, timeoutMs = 60000) {
520
520
  if (this._state !== 'READY') {
521
521
  throw new Error('Client not ready');
522
522
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/sdk",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "Lightweight SDK for agent-to-agent communication via Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -77,8 +77,8 @@
77
77
  "access": "public"
78
78
  },
79
79
  "dependencies": {
80
- "@agent-relay/protocol": "2.2.21",
81
- "@agent-relay/utils": "2.2.21"
80
+ "@agent-relay/protocol": "2.2.24",
81
+ "@agent-relay/utils": "2.2.24"
82
82
  },
83
83
  "engines": {
84
84
  "node": ">=18.0.0"
@@ -782,7 +782,7 @@ export class RelayClient {
782
782
  * @param options.shadowSpeakOn - Shadow speak-on triggers
783
783
  * @param options.waitForReady - Wait for the agent to be ready before resolving (default: false)
784
784
  * @param options.readyTimeoutMs - Timeout for agent to become ready (default: 60000ms)
785
- * @param timeoutMs - Timeout for spawn operation (default: 30000ms)
785
+ * @param timeoutMs - Timeout for spawn operation (default: 60000ms)
786
786
  * @returns Spawn result. When waitForReady is true, includes `ready` and `readyInfo` fields.
787
787
  */
788
788
  async spawn(
@@ -811,7 +811,7 @@ export class RelayClient {
811
811
  /** Timeout for agent to become ready (default: 60000ms). Only used when waitForReady is true. */
812
812
  readyTimeoutMs?: number;
813
813
  },
814
- timeoutMs = 30000
814
+ timeoutMs = 60000
815
815
  ): Promise<SpawnResult> {
816
816
  if (this._state !== 'READY') {
817
817
  throw new Error('Client not ready');
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/spawner",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "Agent spawning types and utilities for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/state",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "Agent state persistence for non-hook CLIs (Codex, Gemini, etc.)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/storage",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "Storage adapters and interfaces for Relay message/session persistence",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -56,7 +56,7 @@
56
56
  }
57
57
  },
58
58
  "dependencies": {
59
- "@agent-relay/protocol": "2.2.21"
59
+ "@agent-relay/protocol": "2.2.24"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/telemetry",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "Anonymous telemetry for Agent Relay usage analytics",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/trajectory",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "Trajectory integration utilities (trail/PDERO) for Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/config": "2.2.21"
25
+ "@agent-relay/config": "2.2.24"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/user-directory",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "User directory service for agent-relay (per-user credential storage)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/resiliency": "2.2.21"
25
+ "@agent-relay/resiliency": "2.2.24"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/utils",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "Shared utilities for agent-relay: logging, name generation, command resolution, update checking",
5
5
  "type": "module",
6
6
  "main": "dist/cjs/index.js",
@@ -112,8 +112,8 @@
112
112
  "vitest": "^3.2.4"
113
113
  },
114
114
  "dependencies": {
115
- "@agent-relay/config": "2.2.21",
116
- "@agent-relay/protocol": "2.2.21",
115
+ "@agent-relay/config": "2.2.24",
116
+ "@agent-relay/protocol": "2.2.24",
117
117
  "compare-versions": "^6.1.1"
118
118
  },
119
119
  "publishConfig": {
@@ -568,7 +568,7 @@ export class RelayClient {
568
568
  shadowTriggers: options.shadowTriggers,
569
569
  shadowSpeakOn: options.shadowSpeakOn,
570
570
  };
571
- const result = await this.requestResponse('SPAWN', payload, 30000 // 30 second timeout for spawn
571
+ const result = await this.requestResponse('SPAWN', payload, 60000 // 60 second timeout for spawn
572
572
  );
573
573
  return toSpawnResult(result);
574
574
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/wrapper",
3
- "version": "2.2.21",
3
+ "version": "2.2.24",
4
4
  "description": "CLI agent wrappers for Agent Relay - tmux, pty integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -30,11 +30,11 @@
30
30
  "clean": "rm -rf dist"
31
31
  },
32
32
  "dependencies": {
33
- "@agent-relay/api-types": "2.2.21",
34
- "@agent-relay/protocol": "2.2.21",
35
- "@agent-relay/config": "2.2.21",
36
- "@agent-relay/continuity": "2.2.21",
37
- "@agent-relay/resiliency": "2.2.21",
33
+ "@agent-relay/api-types": "2.2.24",
34
+ "@agent-relay/protocol": "2.2.24",
35
+ "@agent-relay/config": "2.2.24",
36
+ "@agent-relay/continuity": "2.2.24",
37
+ "@agent-relay/resiliency": "2.2.24",
38
38
  "zod": "^3.23.8"
39
39
  },
40
40
  "devDependencies": {
@@ -290,7 +290,7 @@ describe('RelayClient', () => {
290
290
  model: 'opus',
291
291
  cwd: '/test/path',
292
292
  }),
293
- 30000
293
+ 60000
294
294
  );
295
295
  expect(result.success).toBe(true);
296
296
  });
@@ -750,7 +750,7 @@ export class RelayClient {
750
750
  const result = await this.requestResponse<SpawnResultPayload>(
751
751
  'SPAWN',
752
752
  payload as unknown as Record<string, unknown>,
753
- 30000 // 30 second timeout for spawn
753
+ 60000 // 60 second timeout for spawn
754
754
  );
755
755
 
756
756
  return toSpawnResult(result);