agent-relay 2.0.5 → 2.0.6

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 (101) hide show
  1. package/dist/dashboard/out/404.html +1 -1
  2. package/dist/dashboard/out/app/onboarding.html +1 -1
  3. package/dist/dashboard/out/app/onboarding.txt +1 -1
  4. package/dist/dashboard/out/app.html +1 -1
  5. package/dist/dashboard/out/app.txt +1 -1
  6. package/dist/dashboard/out/cloud/link.html +1 -1
  7. package/dist/dashboard/out/cloud/link.txt +1 -1
  8. package/dist/dashboard/out/connect-repos.html +1 -1
  9. package/dist/dashboard/out/connect-repos.txt +1 -1
  10. package/dist/dashboard/out/history.html +1 -1
  11. package/dist/dashboard/out/history.txt +1 -1
  12. package/dist/dashboard/out/index.html +1 -1
  13. package/dist/dashboard/out/index.txt +1 -1
  14. package/dist/dashboard/out/login.html +1 -1
  15. package/dist/dashboard/out/login.txt +1 -1
  16. package/dist/dashboard/out/metrics.html +1 -1
  17. package/dist/dashboard/out/metrics.txt +1 -1
  18. package/dist/dashboard/out/pricing.html +1 -1
  19. package/dist/dashboard/out/pricing.txt +1 -1
  20. package/dist/dashboard/out/providers/setup/claude.html +1 -1
  21. package/dist/dashboard/out/providers/setup/claude.txt +1 -1
  22. package/dist/dashboard/out/providers/setup/codex.html +1 -1
  23. package/dist/dashboard/out/providers/setup/codex.txt +1 -1
  24. package/dist/dashboard/out/providers/setup/cursor.html +1 -1
  25. package/dist/dashboard/out/providers/setup/cursor.txt +1 -1
  26. package/dist/dashboard/out/providers.html +1 -1
  27. package/dist/dashboard/out/providers.txt +1 -1
  28. package/dist/dashboard/out/signup.html +1 -1
  29. package/dist/dashboard/out/signup.txt +1 -1
  30. package/package.json +11 -11
  31. package/packages/api-types/package.json +1 -1
  32. package/packages/bridge/dist/spawner.d.ts +2 -0
  33. package/packages/bridge/dist/spawner.js +24 -6
  34. package/packages/bridge/dist/types.d.ts +2 -0
  35. package/packages/bridge/package.json +7 -7
  36. package/packages/cloud/package.json +6 -6
  37. package/packages/config/package.json +2 -2
  38. package/packages/continuity/package.json +1 -1
  39. package/packages/daemon/dist/spawn-manager.js +5 -1
  40. package/packages/daemon/package.json +12 -12
  41. package/packages/dashboard/dist/server.js +2 -0
  42. package/packages/dashboard/package.json +12 -12
  43. package/packages/dashboard/ui-dist/404.html +1 -1
  44. package/packages/dashboard/ui-dist/app/onboarding.html +1 -1
  45. package/packages/dashboard/ui-dist/app/onboarding.txt +1 -1
  46. package/packages/dashboard/ui-dist/app.html +1 -1
  47. package/packages/dashboard/ui-dist/app.txt +1 -1
  48. package/packages/dashboard/ui-dist/cloud/link.html +1 -1
  49. package/packages/dashboard/ui-dist/cloud/link.txt +1 -1
  50. package/packages/dashboard/ui-dist/connect-repos.html +1 -1
  51. package/packages/dashboard/ui-dist/connect-repos.txt +1 -1
  52. package/packages/dashboard/ui-dist/history.html +1 -1
  53. package/packages/dashboard/ui-dist/history.txt +1 -1
  54. package/packages/dashboard/ui-dist/index.html +1 -1
  55. package/packages/dashboard/ui-dist/index.txt +1 -1
  56. package/packages/dashboard/ui-dist/login.html +1 -1
  57. package/packages/dashboard/ui-dist/login.txt +1 -1
  58. package/packages/dashboard/ui-dist/metrics.html +1 -1
  59. package/packages/dashboard/ui-dist/metrics.txt +1 -1
  60. package/packages/dashboard/ui-dist/pricing.html +1 -1
  61. package/packages/dashboard/ui-dist/pricing.txt +1 -1
  62. package/packages/dashboard/ui-dist/providers/setup/claude.html +1 -1
  63. package/packages/dashboard/ui-dist/providers/setup/claude.txt +1 -1
  64. package/packages/dashboard/ui-dist/providers/setup/codex.html +1 -1
  65. package/packages/dashboard/ui-dist/providers/setup/codex.txt +1 -1
  66. package/packages/dashboard/ui-dist/providers/setup/cursor.html +1 -1
  67. package/packages/dashboard/ui-dist/providers/setup/cursor.txt +1 -1
  68. package/packages/dashboard/ui-dist/providers.html +1 -1
  69. package/packages/dashboard/ui-dist/providers.txt +1 -1
  70. package/packages/dashboard/ui-dist/signup.html +1 -1
  71. package/packages/dashboard/ui-dist/signup.txt +1 -1
  72. package/packages/dashboard-server/dist/server.js +2 -0
  73. package/packages/dashboard-server/package.json +12 -12
  74. package/packages/hooks/package.json +4 -4
  75. package/packages/mcp/dist/prompts/protocol.d.ts +1 -1
  76. package/packages/mcp/dist/prompts/protocol.js +6 -14
  77. package/packages/mcp/package.json +2 -2
  78. package/packages/memory/package.json +2 -2
  79. package/packages/policy/package.json +2 -2
  80. package/packages/protocol/dist/types.d.ts +2 -0
  81. package/packages/protocol/package.json +1 -1
  82. package/packages/resiliency/package.json +1 -1
  83. package/packages/sdk/package.json +2 -2
  84. package/packages/spawner/package.json +1 -1
  85. package/packages/state/package.json +1 -1
  86. package/packages/storage/package.json +2 -2
  87. package/packages/telemetry/dist/client.js +1 -0
  88. package/packages/telemetry/package.json +1 -1
  89. package/packages/trajectory/package.json +2 -2
  90. package/packages/user-directory/package.json +2 -2
  91. package/packages/utils/package.json +1 -1
  92. package/packages/wrapper/dist/relay-pty-orchestrator.js +37 -28
  93. package/packages/wrapper/package.json +6 -6
  94. /package/dist/dashboard/out/_next/static/{xtLmZI8Coh2009JpfvOBw → lIJs7zSKBaI58kpqegulQ}/_buildManifest.js +0 -0
  95. /package/dist/dashboard/out/_next/static/{xtLmZI8Coh2009JpfvOBw → lIJs7zSKBaI58kpqegulQ}/_ssgManifest.js +0 -0
  96. /package/packages/dashboard/ui-dist/_next/static/{QWdjV9SGDgz-GkriZP7Ao → KIxE0Ds_zdGuDJDQu7_sb}/_buildManifest.js +0 -0
  97. /package/packages/dashboard/ui-dist/_next/static/{QWdjV9SGDgz-GkriZP7Ao → KIxE0Ds_zdGuDJDQu7_sb}/_ssgManifest.js +0 -0
  98. /package/packages/dashboard/ui-dist/_next/static/{SySrsm8xdGaeJLrZ2RNuf → SoK46dEi3IsNBVWXD9x0L}/_buildManifest.js +0 -0
  99. /package/packages/dashboard/ui-dist/_next/static/{SySrsm8xdGaeJLrZ2RNuf → SoK46dEi3IsNBVWXD9x0L}/_ssgManifest.js +0 -0
  100. /package/packages/dashboard/ui-dist/_next/static/{xtLmZI8Coh2009JpfvOBw → lIJs7zSKBaI58kpqegulQ}/_buildManifest.js +0 -0
  101. /package/packages/dashboard/ui-dist/_next/static/{xtLmZI8Coh2009JpfvOBw → lIJs7zSKBaI58kpqegulQ}/_ssgManifest.js +0 -0
@@ -91,21 +91,13 @@ Channel messages include the channel:
91
91
  Relay message from Alice [msg-id-456] [#general]: Hello team!
92
92
  \`\`\`
93
93
 
94
- ### ACK/DONE Protocol
95
- When assigned a task:
96
- 1. Send ACK immediately: "ACK: Starting work on X"
94
+ ### Optional: ACK/DONE Convention
95
+ Some applications use ACK/DONE conventions for task tracking. If your application uses this pattern:
96
+ 1. Send ACK when starting: "ACK: Starting work on X"
97
97
  2. Send progress updates as needed
98
98
  3. Send DONE when complete: "DONE: Completed X with result Y"
99
99
 
100
- Example:
101
- \`\`\`
102
- # When receiving a task
103
- relay_send(to="Lead", message="ACK: Starting test suite run")
104
-
105
- # ... do work ...
106
-
107
- relay_send(to="Lead", message="DONE: All 42 tests passed")
108
- \`\`\`
100
+ Note: This is an application-level convention, not a protocol requirement. Check your application's documentation for expected message formats.
109
101
 
110
102
  ## Best Practices
111
103
 
@@ -116,9 +108,9 @@ relay_send(to="Lead", message="DONE: All 42 tests passed")
116
108
  - Use channels for team announcements
117
109
 
118
110
  ### For Worker Agents
119
- - ACK immediately when receiving tasks
111
+ - Respond promptly when receiving tasks
120
112
  - Send progress updates for long tasks
121
- - Send DONE with results when complete
113
+ - Report results when complete
122
114
  - Ask clarifying questions if needed
123
115
 
124
116
  ### Message Etiquette
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/mcp",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
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,7 +47,7 @@
47
47
  "prepublishOnly": "npm run clean && npm run build && npm test"
48
48
  },
49
49
  "dependencies": {
50
- "@agent-relay/config": "2.0.5",
50
+ "@agent-relay/config": "2.0.6",
51
51
  "@modelcontextprotocol/sdk": "^1.0.0",
52
52
  "zod": "^3.23.8"
53
53
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/memory",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
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.0.5"
25
+ "@agent-relay/hooks": "2.0.6"
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.0.5",
3
+ "version": "2.0.6",
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.0.5"
25
+ "@agent-relay/config": "2.0.6"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -278,6 +278,8 @@ export interface SpawnPayload {
278
278
  shadowSpeakOn?: SpeakOnTrigger[];
279
279
  /** User ID for cloud persistence */
280
280
  userId?: string;
281
+ /** Include ACK/DONE workflow conventions in agent instructions (default: false) */
282
+ includeWorkflowConventions?: boolean;
281
283
  }
282
284
  export interface SpawnPolicyDecision {
283
285
  allowed: boolean;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/protocol",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
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.0.5",
3
+ "version": "2.0.6",
4
4
  "description": "Health monitoring, logging, metrics, and crash resilience 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/sdk",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
4
4
  "description": "Lightweight SDK for agent-to-agent communication via Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -55,7 +55,7 @@
55
55
  "access": "public"
56
56
  },
57
57
  "dependencies": {
58
- "@agent-relay/protocol": "2.0.5"
58
+ "@agent-relay/protocol": "2.0.6"
59
59
  },
60
60
  "engines": {
61
61
  "node": ">=18.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/spawner",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
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.0.5",
3
+ "version": "2.0.6",
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.0.5",
3
+ "version": "2.0.6",
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.0.5"
59
+ "@agent-relay/protocol": "2.0.6"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@types/node": "^22.19.3",
@@ -77,6 +77,7 @@ export function initTelemetry(options = {}) {
77
77
  host: posthogConfig.host,
78
78
  flushAt: 10,
79
79
  flushInterval: 10000,
80
+ disableGeoip: false, // CLI runs on user's machine, so IP is correct for geo
80
81
  });
81
82
  commonProps = buildCommonProperties();
82
83
  anonymousId = getAnonymousId();
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/telemetry",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
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.0.5",
3
+ "version": "2.0.6",
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.0.5"
25
+ "@agent-relay/config": "2.0.6"
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.0.5",
3
+ "version": "2.0.6",
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.0.5"
25
+ "@agent-relay/resiliency": "2.0.6"
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.0.5",
3
+ "version": "2.0.6",
4
4
  "description": "Shared utilities for agent-relay: logging, name generation, command resolution, update checking",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -93,6 +93,10 @@ export class RelayPtyOrchestrator extends BaseWrapper {
93
93
  constructor(config) {
94
94
  super(config);
95
95
  this.config = config;
96
+ // Validate agent name to prevent path traversal attacks
97
+ if (config.name.includes('..') || config.name.includes('/') || config.name.includes('\\')) {
98
+ throw new Error(`Invalid agent name: "${config.name}" contains path traversal characters`);
99
+ }
96
100
  // Get project paths (used for logs and local mode)
97
101
  const projectPaths = getProjectPaths(config.cwd);
98
102
  // Canonical outbox path - agents ALWAYS write here (transparent symlink in workspace mode)
@@ -141,8 +145,9 @@ export class RelayPtyOrchestrator extends BaseWrapper {
141
145
  localSocketPath = tmpSocketPath;
142
146
  }
143
147
  this.socketPath = localSocketPath;
144
- // No legacy path needed for local mode
145
- this._legacyOutboxPath = this._outboxPath;
148
+ // Legacy path for backwards compat (older agents might still use /tmp/relay-outbox)
149
+ // Even in local mode, we need this symlink for agents with stale instructions
150
+ this._legacyOutboxPath = `/tmp/relay-outbox/${config.name}`;
146
151
  }
147
152
  if (this.socketPath.length > MAX_SOCKET_PATH_LENGTH) {
148
153
  throw new Error(`Socket path exceeds ${MAX_SOCKET_PATH_LENGTH} chars: ${this.socketPath.length}`);
@@ -224,31 +229,31 @@ export class RelayPtyOrchestrator extends BaseWrapper {
224
229
  mkdirSync(this._outboxPath, { recursive: true });
225
230
  }
226
231
  this.log(` Created outbox directory: ${this._outboxPath}`);
227
- // In workspace mode, create symlinks so agents can use canonical path
228
- if (this._workspaceId) {
229
- // Helper to create a symlink, cleaning up existing path first
230
- const createSymlinkSafe = (linkPath, targetPath) => {
231
- const linkParent = dirname(linkPath);
232
- if (!existsSync(linkParent)) {
233
- mkdirSync(linkParent, { recursive: true });
234
- }
235
- if (existsSync(linkPath)) {
236
- try {
237
- const stats = lstatSync(linkPath);
238
- if (stats.isSymbolicLink() || stats.isFile()) {
239
- unlinkSync(linkPath);
240
- }
241
- else if (stats.isDirectory()) {
242
- rmSync(linkPath, { recursive: true, force: true });
243
- }
232
+ // Helper to create a symlink, cleaning up existing path first
233
+ const createSymlinkSafe = (linkPath, targetPath) => {
234
+ const linkParent = dirname(linkPath);
235
+ if (!existsSync(linkParent)) {
236
+ mkdirSync(linkParent, { recursive: true });
237
+ }
238
+ if (existsSync(linkPath)) {
239
+ try {
240
+ const stats = lstatSync(linkPath);
241
+ if (stats.isSymbolicLink() || stats.isFile()) {
242
+ unlinkSync(linkPath);
244
243
  }
245
- catch {
246
- // Ignore cleanup errors
244
+ else if (stats.isDirectory()) {
245
+ rmSync(linkPath, { recursive: true, force: true });
247
246
  }
248
247
  }
249
- symlinkSync(targetPath, linkPath);
250
- this.log(` Created symlink: ${linkPath} -> ${targetPath}`);
251
- };
248
+ catch {
249
+ // Ignore cleanup errors
250
+ }
251
+ }
252
+ symlinkSync(targetPath, linkPath);
253
+ this.log(` Created symlink: ${linkPath} -> ${targetPath}`);
254
+ };
255
+ // In workspace mode, create symlinks so agents can use canonical path
256
+ if (this._workspaceId) {
252
257
  // Symlink canonical path (~/.agent-relay/outbox/{name}) -> workspace path
253
258
  // This is the PRIMARY symlink - agents write to canonical path, relay-pty watches workspace path
254
259
  if (this._canonicalOutboxPath !== this._outboxPath) {
@@ -259,6 +264,10 @@ export class RelayPtyOrchestrator extends BaseWrapper {
259
264
  createSymlinkSafe(this._legacyOutboxPath, this._outboxPath);
260
265
  }
261
266
  }
267
+ // In local mode, also create legacy symlink for backwards compat with stale instructions
268
+ if (!this._workspaceId && this._legacyOutboxPath !== this._outboxPath) {
269
+ createSymlinkSafe(this._legacyOutboxPath, this._outboxPath);
270
+ }
262
271
  }
263
272
  catch (err) {
264
273
  this.logError(` Failed to set up outbox: ${err.message}`);
@@ -1485,10 +1494,10 @@ EOF
1485
1494
  \`\`\`
1486
1495
  Then output: \`->relay-file:spawn\`
1487
1496
 
1488
- **Protocol Tips:**
1489
- - Always ACK when you receive a task: "ACK: Brief description"
1490
- - Send DONE when complete: "DONE: What was accomplished"
1491
- - Keep your lead informed of progress
1497
+ **Message Format:**
1498
+ - \`TO: AgentName\` for direct messages
1499
+ - \`TO: *\` to broadcast to all agents
1500
+ - \`TO: #channel\` for channel messages
1492
1501
 
1493
1502
  📖 See **AGENTS.md** in the project root for full protocol documentation.`;
1494
1503
  this.log(` Sending periodic protocol reminder (session: ${sessionDurationMinutes}m)`);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/wrapper",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
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.0.5",
34
- "@agent-relay/protocol": "2.0.5",
35
- "@agent-relay/config": "2.0.5",
36
- "@agent-relay/continuity": "2.0.5",
37
- "@agent-relay/resiliency": "2.0.5"
33
+ "@agent-relay/api-types": "2.0.6",
34
+ "@agent-relay/protocol": "2.0.6",
35
+ "@agent-relay/config": "2.0.6",
36
+ "@agent-relay/continuity": "2.0.6",
37
+ "@agent-relay/resiliency": "2.0.6"
38
38
  },
39
39
  "devDependencies": {
40
40
  "typescript": "^5.9.3",