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.
- package/dist/dashboard/out/404.html +1 -1
- package/dist/dashboard/out/app/onboarding.html +1 -1
- package/dist/dashboard/out/app/onboarding.txt +1 -1
- package/dist/dashboard/out/app.html +1 -1
- package/dist/dashboard/out/app.txt +1 -1
- package/dist/dashboard/out/cloud/link.html +1 -1
- package/dist/dashboard/out/cloud/link.txt +1 -1
- package/dist/dashboard/out/connect-repos.html +1 -1
- package/dist/dashboard/out/connect-repos.txt +1 -1
- package/dist/dashboard/out/history.html +1 -1
- package/dist/dashboard/out/history.txt +1 -1
- package/dist/dashboard/out/index.html +1 -1
- package/dist/dashboard/out/index.txt +1 -1
- package/dist/dashboard/out/login.html +1 -1
- package/dist/dashboard/out/login.txt +1 -1
- package/dist/dashboard/out/metrics.html +1 -1
- package/dist/dashboard/out/metrics.txt +1 -1
- package/dist/dashboard/out/pricing.html +1 -1
- package/dist/dashboard/out/pricing.txt +1 -1
- package/dist/dashboard/out/providers/setup/claude.html +1 -1
- package/dist/dashboard/out/providers/setup/claude.txt +1 -1
- package/dist/dashboard/out/providers/setup/codex.html +1 -1
- package/dist/dashboard/out/providers/setup/codex.txt +1 -1
- package/dist/dashboard/out/providers/setup/cursor.html +1 -1
- package/dist/dashboard/out/providers/setup/cursor.txt +1 -1
- package/dist/dashboard/out/providers.html +1 -1
- package/dist/dashboard/out/providers.txt +1 -1
- package/dist/dashboard/out/signup.html +1 -1
- package/dist/dashboard/out/signup.txt +1 -1
- package/package.json +11 -11
- package/packages/api-types/package.json +1 -1
- package/packages/bridge/dist/spawner.d.ts +2 -0
- package/packages/bridge/dist/spawner.js +24 -6
- package/packages/bridge/dist/types.d.ts +2 -0
- package/packages/bridge/package.json +7 -7
- package/packages/cloud/package.json +6 -6
- package/packages/config/package.json +2 -2
- package/packages/continuity/package.json +1 -1
- package/packages/daemon/dist/spawn-manager.js +5 -1
- package/packages/daemon/package.json +12 -12
- package/packages/dashboard/dist/server.js +2 -0
- package/packages/dashboard/package.json +12 -12
- package/packages/dashboard/ui-dist/404.html +1 -1
- package/packages/dashboard/ui-dist/app/onboarding.html +1 -1
- package/packages/dashboard/ui-dist/app/onboarding.txt +1 -1
- package/packages/dashboard/ui-dist/app.html +1 -1
- package/packages/dashboard/ui-dist/app.txt +1 -1
- package/packages/dashboard/ui-dist/cloud/link.html +1 -1
- package/packages/dashboard/ui-dist/cloud/link.txt +1 -1
- package/packages/dashboard/ui-dist/connect-repos.html +1 -1
- package/packages/dashboard/ui-dist/connect-repos.txt +1 -1
- package/packages/dashboard/ui-dist/history.html +1 -1
- package/packages/dashboard/ui-dist/history.txt +1 -1
- package/packages/dashboard/ui-dist/index.html +1 -1
- package/packages/dashboard/ui-dist/index.txt +1 -1
- package/packages/dashboard/ui-dist/login.html +1 -1
- package/packages/dashboard/ui-dist/login.txt +1 -1
- package/packages/dashboard/ui-dist/metrics.html +1 -1
- package/packages/dashboard/ui-dist/metrics.txt +1 -1
- package/packages/dashboard/ui-dist/pricing.html +1 -1
- package/packages/dashboard/ui-dist/pricing.txt +1 -1
- package/packages/dashboard/ui-dist/providers/setup/claude.html +1 -1
- package/packages/dashboard/ui-dist/providers/setup/claude.txt +1 -1
- package/packages/dashboard/ui-dist/providers/setup/codex.html +1 -1
- package/packages/dashboard/ui-dist/providers/setup/codex.txt +1 -1
- package/packages/dashboard/ui-dist/providers/setup/cursor.html +1 -1
- package/packages/dashboard/ui-dist/providers/setup/cursor.txt +1 -1
- package/packages/dashboard/ui-dist/providers.html +1 -1
- package/packages/dashboard/ui-dist/providers.txt +1 -1
- package/packages/dashboard/ui-dist/signup.html +1 -1
- package/packages/dashboard/ui-dist/signup.txt +1 -1
- package/packages/dashboard-server/dist/server.js +2 -0
- package/packages/dashboard-server/package.json +12 -12
- package/packages/hooks/package.json +4 -4
- package/packages/mcp/dist/prompts/protocol.d.ts +1 -1
- package/packages/mcp/dist/prompts/protocol.js +6 -14
- package/packages/mcp/package.json +2 -2
- package/packages/memory/package.json +2 -2
- package/packages/policy/package.json +2 -2
- package/packages/protocol/dist/types.d.ts +2 -0
- package/packages/protocol/package.json +1 -1
- package/packages/resiliency/package.json +1 -1
- package/packages/sdk/package.json +2 -2
- package/packages/spawner/package.json +1 -1
- package/packages/state/package.json +1 -1
- package/packages/storage/package.json +2 -2
- package/packages/telemetry/dist/client.js +1 -0
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +1 -1
- package/packages/wrapper/dist/relay-pty-orchestrator.js +37 -28
- package/packages/wrapper/package.json +6 -6
- /package/dist/dashboard/out/_next/static/{xtLmZI8Coh2009JpfvOBw → lIJs7zSKBaI58kpqegulQ}/_buildManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/{xtLmZI8Coh2009JpfvOBw → lIJs7zSKBaI58kpqegulQ}/_ssgManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{QWdjV9SGDgz-GkriZP7Ao → KIxE0Ds_zdGuDJDQu7_sb}/_buildManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{QWdjV9SGDgz-GkriZP7Ao → KIxE0Ds_zdGuDJDQu7_sb}/_ssgManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{SySrsm8xdGaeJLrZ2RNuf → SoK46dEi3IsNBVWXD9x0L}/_buildManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{SySrsm8xdGaeJLrZ2RNuf → SoK46dEi3IsNBVWXD9x0L}/_ssgManifest.js +0 -0
- /package/packages/dashboard/ui-dist/_next/static/{xtLmZI8Coh2009JpfvOBw → lIJs7zSKBaI58kpqegulQ}/_buildManifest.js +0 -0
- /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
|
|
95
|
-
|
|
96
|
-
1. Send ACK
|
|
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
|
-
|
|
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
|
-
-
|
|
111
|
+
- Respond promptly when receiving tasks
|
|
120
112
|
- Send progress updates for long tasks
|
|
121
|
-
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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/sdk",
|
|
3
|
-
"version": "2.0.
|
|
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.
|
|
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/storage",
|
|
3
|
-
"version": "2.0.
|
|
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.
|
|
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/trajectory",
|
|
3
|
-
"version": "2.0.
|
|
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.
|
|
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.
|
|
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.
|
|
25
|
+
"@agent-relay/resiliency": "2.0.6"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/node": "^22.19.3",
|
|
@@ -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
|
-
//
|
|
145
|
-
this
|
|
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
|
-
//
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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
|
-
|
|
246
|
-
|
|
244
|
+
else if (stats.isDirectory()) {
|
|
245
|
+
rmSync(linkPath, { recursive: true, force: true });
|
|
247
246
|
}
|
|
248
247
|
}
|
|
249
|
-
|
|
250
|
-
|
|
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
|
-
**
|
|
1489
|
-
-
|
|
1490
|
-
-
|
|
1491
|
-
-
|
|
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.
|
|
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.
|
|
34
|
-
"@agent-relay/protocol": "2.0.
|
|
35
|
-
"@agent-relay/config": "2.0.
|
|
36
|
-
"@agent-relay/continuity": "2.0.
|
|
37
|
-
"@agent-relay/resiliency": "2.0.
|
|
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",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|