agent-relay 2.3.13 → 2.3.14

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 (41) hide show
  1. package/package.json +20 -20
  2. package/packages/acp-bridge/package.json +2 -2
  3. package/packages/bridge/package.json +7 -7
  4. package/packages/broker-sdk/dist/protocol.d.ts +4 -0
  5. package/packages/broker-sdk/dist/protocol.d.ts.map +1 -1
  6. package/packages/broker-sdk/dist/relay.d.ts +6 -0
  7. package/packages/broker-sdk/dist/relay.d.ts.map +1 -1
  8. package/packages/broker-sdk/dist/relay.js +8 -0
  9. package/packages/broker-sdk/dist/relay.js.map +1 -1
  10. package/packages/broker-sdk/dist/relaycast.d.ts +9 -3
  11. package/packages/broker-sdk/dist/relaycast.d.ts.map +1 -1
  12. package/packages/broker-sdk/dist/relaycast.js +42 -8
  13. package/packages/broker-sdk/dist/relaycast.js.map +1 -1
  14. package/packages/broker-sdk/dist/workflows/runner.d.ts +4 -0
  15. package/packages/broker-sdk/dist/workflows/runner.d.ts.map +1 -1
  16. package/packages/broker-sdk/dist/workflows/runner.js +87 -25
  17. package/packages/broker-sdk/dist/workflows/runner.js.map +1 -1
  18. package/packages/broker-sdk/package.json +2 -2
  19. package/packages/broker-sdk/src/protocol.ts +5 -0
  20. package/packages/broker-sdk/src/relay.ts +11 -0
  21. package/packages/broker-sdk/src/relaycast.ts +45 -9
  22. package/packages/broker-sdk/src/workflows/README.md +30 -0
  23. package/packages/broker-sdk/src/workflows/runner.ts +112 -25
  24. package/packages/config/package.json +2 -2
  25. package/packages/continuity/package.json +2 -2
  26. package/packages/daemon/package.json +12 -12
  27. package/packages/hooks/package.json +4 -4
  28. package/packages/mcp/package.json +5 -5
  29. package/packages/memory/package.json +2 -2
  30. package/packages/policy/package.json +2 -2
  31. package/packages/protocol/package.json +1 -1
  32. package/packages/resiliency/package.json +1 -1
  33. package/packages/sdk/package.json +3 -3
  34. package/packages/spawner/package.json +1 -1
  35. package/packages/state/package.json +1 -1
  36. package/packages/storage/package.json +2 -2
  37. package/packages/telemetry/package.json +1 -1
  38. package/packages/trajectory/package.json +2 -2
  39. package/packages/user-directory/package.json +2 -2
  40. package/packages/utils/package.json +3 -3
  41. package/packages/wrapper/package.json +5 -5
@@ -125,18 +125,24 @@ export class WorkflowRunner {
125
125
  private async ensureRelaycastApiKey(channel: string): Promise<void> {
126
126
  if (process.env.RELAY_API_KEY) return;
127
127
 
128
- // Check cached credentials
129
- const cachePath = path.join(homedir(), '.agent-relay', 'relaycast.json');
130
- if (existsSync(cachePath)) {
131
- try {
132
- const raw = await readFile(cachePath, 'utf-8');
133
- const creds = JSON.parse(raw);
134
- if (creds.api_key) {
135
- process.env.RELAY_API_KEY = creds.api_key;
136
- return;
128
+ // Check cached credentials — prefer per-project cache (written by the local
129
+ // relay daemon) over the legacy global cache so concurrent workflows from
130
+ // different repos never stomp each other's credentials.
131
+ const projectCachePath = path.join(this.cwd, '.agent-relay', 'relaycast.json');
132
+ const globalCachePath = path.join(homedir(), '.agent-relay', 'relaycast.json');
133
+
134
+ for (const cachePath of [projectCachePath, globalCachePath]) {
135
+ if (existsSync(cachePath)) {
136
+ try {
137
+ const raw = await readFile(cachePath, 'utf-8');
138
+ const creds = JSON.parse(raw);
139
+ if (creds.api_key) {
140
+ process.env.RELAY_API_KEY = creds.api_key;
141
+ return;
142
+ }
143
+ } catch {
144
+ // Cache corrupt — try next path
137
145
  }
138
- } catch {
139
- // Cache corrupt — fall through to auto-create
140
146
  }
141
147
  }
142
148
 
@@ -164,11 +170,12 @@ export class WorkflowRunner {
164
170
  throw new Error('Relaycast workspace response missing api_key');
165
171
  }
166
172
 
167
- // Cache credentials for future runs
168
- const cacheDir = path.dirname(cachePath);
173
+ // Cache credentials in the per-project directory so concurrent workflows
174
+ // from different repos each get their own workspace credentials.
175
+ const cacheDir = path.dirname(projectCachePath);
169
176
  await mkdir(cacheDir, { recursive: true, mode: 0o700 });
170
177
  await writeFile(
171
- cachePath,
178
+ projectCachePath,
172
179
  JSON.stringify({
173
180
  workspace_id: workspaceId,
174
181
  api_key: apiKey,
@@ -494,7 +501,10 @@ export class WorkflowRunner {
494
501
  });
495
502
 
496
503
  // Create the dedicated workflow channel and join it
497
- this.relaycastApi = new RelaycastApi({ agentName: 'WorkflowRunner' });
504
+ this.relaycastApi = new RelaycastApi({
505
+ agentName: 'WorkflowRunner',
506
+ cachePath: path.join(this.cwd, '.agent-relay', 'relaycast.json'),
507
+ });
498
508
  await this.relaycastApi.createChannel(channel, workflow.description);
499
509
  await this.relaycastApi.joinChannel(channel);
500
510
  this.postToChannel(
@@ -522,7 +532,6 @@ export class WorkflowRunner {
522
532
  if (allCompleted) {
523
533
  await this.updateRunStatus(runId, 'completed');
524
534
  this.emit({ type: 'run:completed', runId });
525
- this.postToChannel(`Workflow **${workflow.name}** completed — all steps passed`);
526
535
 
527
536
  // Complete trajectory with summary
528
537
  const outcomes = this.collectOutcomes(stepStates, workflow.steps);
@@ -532,12 +541,17 @@ export class WorkflowRunner {
532
541
  learnings: this.trajectory.extractLearnings(outcomes),
533
542
  challenges: this.trajectory.extractChallenges(outcomes),
534
543
  });
544
+
545
+ // Post rich completion report to channel
546
+ this.postCompletionReport(workflow.name, outcomes, summary, confidence);
535
547
  } else {
536
548
  const failedStep = [...stepStates.values()].find((s) => s.row.status === 'failed');
537
549
  const errorMsg = failedStep?.row.error ?? 'One or more steps failed';
538
550
  await this.updateRunStatus(runId, 'failed', errorMsg);
539
551
  this.emit({ type: 'run:failed', runId, error: errorMsg });
540
- this.postToChannel(`Workflow **${workflow.name}** failed: ${errorMsg}`);
552
+
553
+ const outcomes = this.collectOutcomes(stepStates, workflow.steps);
554
+ this.postFailureReport(workflow.name, outcomes, errorMsg);
541
555
 
542
556
  // Abandon trajectory on failure
543
557
  await this.trajectory.abandon(errorMsg);
@@ -549,7 +563,7 @@ export class WorkflowRunner {
549
563
 
550
564
  if (status === 'cancelled') {
551
565
  this.emit({ type: 'run:cancelled', runId });
552
- this.postToChannel(`Workflow cancelled`);
566
+ this.postToChannel(`Workflow **${workflow.name}** cancelled`);
553
567
  await this.trajectory.abandon('Cancelled by user');
554
568
  } else {
555
569
  this.emit({ type: 'run:failed', runId, error: errorMsg });
@@ -632,7 +646,10 @@ export class WorkflowRunner {
632
646
  });
633
647
 
634
648
  // Ensure channel exists and join it for resumed runs
635
- this.relaycastApi = new RelaycastApi({ agentName: 'WorkflowRunner' });
649
+ this.relaycastApi = new RelaycastApi({
650
+ agentName: 'WorkflowRunner',
651
+ cachePath: path.join(this.cwd, '.agent-relay', 'relaycast.json'),
652
+ });
636
653
  await this.relaycastApi.createChannel(resumeChannel);
637
654
  await this.relaycastApi.joinChannel(resumeChannel);
638
655
  this.postToChannel(
@@ -653,7 +670,6 @@ export class WorkflowRunner {
653
670
  if (allCompleted) {
654
671
  await this.updateRunStatus(runId, 'completed');
655
672
  this.emit({ type: 'run:completed', runId });
656
- this.postToChannel(`Workflow **${workflow.name}** completed — all steps passed`);
657
673
 
658
674
  const outcomes = this.collectOutcomes(stepStates, workflow.steps);
659
675
  const summary = this.trajectory.buildRunSummary(outcomes);
@@ -662,12 +678,16 @@ export class WorkflowRunner {
662
678
  learnings: this.trajectory.extractLearnings(outcomes),
663
679
  challenges: this.trajectory.extractChallenges(outcomes),
664
680
  });
681
+
682
+ this.postCompletionReport(workflow.name, outcomes, summary, confidence);
665
683
  } else {
666
684
  const failedStep = [...stepStates.values()].find((s) => s.row.status === 'failed');
667
685
  const errorMsg = failedStep?.row.error ?? 'One or more steps failed';
668
686
  await this.updateRunStatus(runId, 'failed', errorMsg);
669
687
  this.emit({ type: 'run:failed', runId, error: errorMsg });
670
- this.postToChannel(`Workflow **${workflow.name}** failed: ${errorMsg}`);
688
+
689
+ const outcomes = this.collectOutcomes(stepStates, workflow.steps);
690
+ this.postFailureReport(workflow.name, outcomes, errorMsg);
671
691
  await this.trajectory.abandon(errorMsg);
672
692
  }
673
693
  } catch (err) {
@@ -934,7 +954,7 @@ export class WorkflowRunner {
934
954
  const agentName = `${step.name}-${this.generateShortId()}`;
935
955
  const taskWithExit = step.task + '\n\n---\n' +
936
956
  'IMPORTANT: When you have fully completed this task, you MUST self-terminate by calling ' +
937
- `the MCP tool: relay_release(name="${agentName}", reason="Task completed"). ` +
957
+ `the MCP tool: remove_agent(name="${agentName}", reason="Task completed"). ` +
938
958
  'Do not wait for further input — release yourself immediately after finishing.';
939
959
 
940
960
  const agentChannels = this.channel ? [this.channel] : agentDef.channels;
@@ -948,12 +968,18 @@ export class WorkflowRunner {
948
968
  idleThresholdSecs: agentDef.constraints?.idleThresholdSecs,
949
969
  });
950
970
 
951
- // Register the spawned agent in Relaycast for observability
971
+ // Register the spawned agent in Relaycast for observability + start heartbeat
972
+ let stopHeartbeat: (() => void) | undefined;
952
973
  if (this.relaycastApi) {
953
- await this.relaycastApi.registerExternalAgent(
974
+ const agentClient = await this.relaycastApi.registerExternalAgent(
954
975
  agent.name,
955
976
  `Workflow agent for step "${step.name}" (${agentDef.cli})`,
956
- ).catch(() => {});
977
+ ).catch(() => null);
978
+
979
+ // Keep the agent online in the dashboard while it's working
980
+ if (agentClient) {
981
+ stopHeartbeat = this.relaycastApi.startHeartbeat(agentClient);
982
+ }
957
983
  }
958
984
 
959
985
  // Invite the spawned agent to the workflow channel
@@ -970,6 +996,9 @@ export class WorkflowRunner {
970
996
  // Wait for agent to exit (self-termination via /exit)
971
997
  const exitResult = await agent.waitForExit(timeoutMs);
972
998
 
999
+ // Stop heartbeat now that agent has exited
1000
+ stopHeartbeat?.();
1001
+
973
1002
  if (exitResult === 'timeout') {
974
1003
  // Safety net: check if the verification file exists before giving up.
975
1004
  // The agent may have completed work but failed to /exit.
@@ -1132,6 +1161,64 @@ export class WorkflowRunner {
1132
1161
  });
1133
1162
  }
1134
1163
 
1164
+ /** Post a rich completion report to the channel. */
1165
+ private postCompletionReport(
1166
+ workflowName: string,
1167
+ outcomes: StepOutcome[],
1168
+ summary: string,
1169
+ confidence: number,
1170
+ ): void {
1171
+ const completed = outcomes.filter((o) => o.status === 'completed');
1172
+ const skipped = outcomes.filter((o) => o.status === 'skipped');
1173
+ const retried = outcomes.filter((o) => o.attempts > 1);
1174
+
1175
+ const lines: string[] = [
1176
+ `## Workflow **${workflowName}** — Complete`,
1177
+ '',
1178
+ summary,
1179
+ `Confidence: ${Math.round(confidence * 100)}%`,
1180
+ '',
1181
+ '### Steps',
1182
+ ...completed.map((o) =>
1183
+ `- **${o.name}** (${o.agent}) — passed${o.verificationPassed ? ' (verified)' : ''}${o.attempts > 1 ? ` after ${o.attempts} attempts` : ''}`,
1184
+ ),
1185
+ ...skipped.map((o) => `- **${o.name}** — skipped`),
1186
+ ];
1187
+
1188
+ if (retried.length > 0) {
1189
+ lines.push('', '### Retries');
1190
+ for (const o of retried) {
1191
+ lines.push(`- ${o.name}: ${o.attempts} attempts`);
1192
+ }
1193
+ }
1194
+
1195
+ this.postToChannel(lines.join('\n'));
1196
+ }
1197
+
1198
+ /** Post a failure report to the channel. */
1199
+ private postFailureReport(
1200
+ workflowName: string,
1201
+ outcomes: StepOutcome[],
1202
+ errorMsg: string,
1203
+ ): void {
1204
+ const completed = outcomes.filter((o) => o.status === 'completed');
1205
+ const failed = outcomes.filter((o) => o.status === 'failed');
1206
+ const skipped = outcomes.filter((o) => o.status === 'skipped');
1207
+
1208
+ const lines: string[] = [
1209
+ `## Workflow **${workflowName}** — Failed`,
1210
+ '',
1211
+ `${completed.length}/${outcomes.length} steps passed. Error: ${errorMsg}`,
1212
+ '',
1213
+ '### Steps',
1214
+ ...completed.map((o) => `- **${o.name}** (${o.agent}) — passed`),
1215
+ ...failed.map((o) => `- **${o.name}** (${o.agent}) — FAILED: ${o.error ?? 'unknown'}`),
1216
+ ...skipped.map((o) => `- **${o.name}** — skipped`),
1217
+ ];
1218
+
1219
+ this.postToChannel(lines.join('\n'));
1220
+ }
1221
+
1135
1222
  // ── Trajectory helpers ────────────────────────────────────────────────
1136
1223
 
1137
1224
  /** Analyze DAG structure for trajectory context. */
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/config",
3
- "version": "2.3.13",
3
+ "version": "2.3.14",
4
4
  "description": "Shared configuration schemas and loaders for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -83,7 +83,7 @@
83
83
  "test:watch": "vitest"
84
84
  },
85
85
  "dependencies": {
86
- "@agent-relay/protocol": "2.3.13",
86
+ "@agent-relay/protocol": "2.3.14",
87
87
  "zod": "^3.23.8",
88
88
  "zod-to-json-schema": "^3.23.1"
89
89
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/continuity",
3
- "version": "2.3.13",
3
+ "version": "2.3.14",
4
4
  "description": "Session continuity manager for Relay (ledgers, handoffs, resume)",
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/memory": "2.3.13"
25
+ "@agent-relay/memory": "2.3.14"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/daemon",
3
- "version": "2.3.13",
3
+ "version": "2.3.14",
4
4
  "description": "Relay daemon server - agent coordination and message routing",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,17 +22,17 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/protocol": "2.3.13",
26
- "@agent-relay/config": "2.3.13",
27
- "@agent-relay/storage": "2.3.13",
28
- "@agent-relay/bridge": "2.3.13",
29
- "@agent-relay/utils": "2.3.13",
30
- "@agent-relay/policy": "2.3.13",
31
- "@agent-relay/memory": "2.3.13",
32
- "@agent-relay/resiliency": "2.3.13",
33
- "@agent-relay/user-directory": "2.3.13",
34
- "@agent-relay/wrapper": "2.3.13",
35
- "@agent-relay/telemetry": "2.3.13",
25
+ "@agent-relay/protocol": "2.3.14",
26
+ "@agent-relay/config": "2.3.14",
27
+ "@agent-relay/storage": "2.3.14",
28
+ "@agent-relay/bridge": "2.3.14",
29
+ "@agent-relay/utils": "2.3.14",
30
+ "@agent-relay/policy": "2.3.14",
31
+ "@agent-relay/memory": "2.3.14",
32
+ "@agent-relay/resiliency": "2.3.14",
33
+ "@agent-relay/user-directory": "2.3.14",
34
+ "@agent-relay/wrapper": "2.3.14",
35
+ "@agent-relay/telemetry": "2.3.14",
36
36
  "ws": "^8.18.3",
37
37
  "pg": "^8.16.3",
38
38
  "uuid": "^10.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/hooks",
3
- "version": "2.3.13",
3
+ "version": "2.3.14",
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.3.13",
41
- "@agent-relay/config": "2.3.13",
42
- "@agent-relay/trajectory": "2.3.13"
40
+ "@agent-relay/protocol": "2.3.14",
41
+ "@agent-relay/config": "2.3.14",
42
+ "@agent-relay/trajectory": "2.3.14"
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.3.13",
3
+ "version": "2.3.14",
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.3.13",
51
- "@agent-relay/protocol": "2.3.13",
52
- "@agent-relay/utils": "2.3.13",
50
+ "@agent-relay/config": "2.3.14",
51
+ "@agent-relay/protocol": "2.3.14",
52
+ "@agent-relay/utils": "2.3.14",
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.3.13",
58
+ "@agent-relay/sdk": "2.3.14",
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.3.13",
3
+ "version": "2.3.14",
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.3.13"
25
+ "@agent-relay/hooks": "2.3.14"
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.3.13",
3
+ "version": "2.3.14",
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.3.13"
25
+ "@agent-relay/config": "2.3.14"
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.3.13",
3
+ "version": "2.3.14",
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.3.13",
3
+ "version": "2.3.14",
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.3.13",
3
+ "version": "2.3.14",
4
4
  "description": "Lightweight SDK for agent-to-agent communication via Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -60,8 +60,8 @@
60
60
  "access": "public"
61
61
  },
62
62
  "dependencies": {
63
- "@agent-relay/protocol": "2.3.13",
64
- "@agent-relay/utils": "2.3.13"
63
+ "@agent-relay/protocol": "2.3.14",
64
+ "@agent-relay/utils": "2.3.14"
65
65
  },
66
66
  "engines": {
67
67
  "node": ">=18.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/spawner",
3
- "version": "2.3.13",
3
+ "version": "2.3.14",
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.3.13",
3
+ "version": "2.3.14",
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.3.13",
3
+ "version": "2.3.14",
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.3.13"
59
+ "@agent-relay/protocol": "2.3.14"
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.3.13",
3
+ "version": "2.3.14",
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.3.13",
3
+ "version": "2.3.14",
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.3.13"
25
+ "@agent-relay/config": "2.3.14"
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.3.13",
3
+ "version": "2.3.14",
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.3.13"
25
+ "@agent-relay/resiliency": "2.3.14"
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.3.13",
3
+ "version": "2.3.14",
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.3.13",
116
- "@agent-relay/protocol": "2.3.13",
115
+ "@agent-relay/config": "2.3.14",
116
+ "@agent-relay/protocol": "2.3.14",
117
117
  "compare-versions": "^6.1.1"
118
118
  },
119
119
  "publishConfig": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/wrapper",
3
- "version": "2.3.13",
3
+ "version": "2.3.14",
4
4
  "description": "CLI agent wrappers for Agent Relay - tmux, pty integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -30,10 +30,10 @@
30
30
  "clean": "rm -rf dist"
31
31
  },
32
32
  "dependencies": {
33
- "@agent-relay/protocol": "2.3.13",
34
- "@agent-relay/config": "2.3.13",
35
- "@agent-relay/continuity": "2.3.13",
36
- "@agent-relay/resiliency": "2.3.13",
33
+ "@agent-relay/protocol": "2.3.14",
34
+ "@agent-relay/config": "2.3.14",
35
+ "@agent-relay/continuity": "2.3.14",
36
+ "@agent-relay/resiliency": "2.3.14",
37
37
  "zod": "^3.23.8"
38
38
  },
39
39
  "devDependencies": {