agent-relay 3.2.22 → 4.0.1

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 (232) hide show
  1. package/README.md +5 -5
  2. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  3. package/bin/agent-relay-broker-darwin-x64 +0 -0
  4. package/bin/agent-relay-broker-linux-arm64 +0 -0
  5. package/bin/agent-relay-broker-linux-x64 +0 -0
  6. package/dist/index.cjs +6564 -2100
  7. package/dist/src/cli/bootstrap.d.ts.map +1 -1
  8. package/dist/src/cli/bootstrap.js +2 -0
  9. package/dist/src/cli/bootstrap.js.map +1 -1
  10. package/dist/src/cli/commands/agent-management.d.ts.map +1 -1
  11. package/dist/src/cli/commands/agent-management.js +14 -4
  12. package/dist/src/cli/commands/agent-management.js.map +1 -1
  13. package/dist/src/cli/commands/core.d.ts +2 -6
  14. package/dist/src/cli/commands/core.d.ts.map +1 -1
  15. package/dist/src/cli/commands/core.js +31 -12
  16. package/dist/src/cli/commands/core.js.map +1 -1
  17. package/dist/src/cli/commands/messaging.d.ts.map +1 -1
  18. package/dist/src/cli/commands/messaging.js +10 -3
  19. package/dist/src/cli/commands/messaging.js.map +1 -1
  20. package/dist/src/cli/commands/monitoring.d.ts +2 -2
  21. package/dist/src/cli/commands/monitoring.d.ts.map +1 -1
  22. package/dist/src/cli/commands/monitoring.js +15 -6
  23. package/dist/src/cli/commands/monitoring.js.map +1 -1
  24. package/dist/src/cli/commands/on/dotfiles.d.ts +35 -0
  25. package/dist/src/cli/commands/on/dotfiles.d.ts.map +1 -0
  26. package/dist/src/cli/commands/on/dotfiles.js +157 -0
  27. package/dist/src/cli/commands/on/dotfiles.js.map +1 -0
  28. package/dist/src/cli/commands/on/prereqs.d.ts +15 -0
  29. package/dist/src/cli/commands/on/prereqs.d.ts.map +1 -0
  30. package/dist/src/cli/commands/on/prereqs.js +103 -0
  31. package/dist/src/cli/commands/on/prereqs.js.map +1 -0
  32. package/dist/src/cli/commands/on/provision.d.ts +22 -0
  33. package/dist/src/cli/commands/on/provision.d.ts.map +1 -0
  34. package/dist/src/cli/commands/on/provision.js +157 -0
  35. package/dist/src/cli/commands/on/provision.js.map +1 -0
  36. package/dist/src/cli/commands/on/relayfile-binary.d.ts +2 -0
  37. package/dist/src/cli/commands/on/relayfile-binary.d.ts.map +1 -0
  38. package/dist/src/cli/commands/on/relayfile-binary.js +208 -0
  39. package/dist/src/cli/commands/on/relayfile-binary.js.map +1 -0
  40. package/dist/src/cli/commands/on/scan.d.ts +8 -0
  41. package/dist/src/cli/commands/on/scan.d.ts.map +1 -0
  42. package/dist/src/cli/commands/on/scan.js +59 -0
  43. package/dist/src/cli/commands/on/scan.js.map +1 -0
  44. package/dist/src/cli/commands/on/services.d.ts +17 -0
  45. package/dist/src/cli/commands/on/services.d.ts.map +1 -0
  46. package/dist/src/cli/commands/on/services.js +328 -0
  47. package/dist/src/cli/commands/on/services.js.map +1 -0
  48. package/dist/src/cli/commands/on/start.d.ts +61 -0
  49. package/dist/src/cli/commands/on/start.d.ts.map +1 -0
  50. package/dist/src/cli/commands/on/start.js +1107 -0
  51. package/dist/src/cli/commands/on/start.js.map +1 -0
  52. package/dist/src/cli/commands/on/stop.d.ts +4 -0
  53. package/dist/src/cli/commands/on/stop.d.ts.map +1 -0
  54. package/dist/src/cli/commands/on/stop.js +11 -0
  55. package/dist/src/cli/commands/on/stop.js.map +1 -0
  56. package/dist/src/cli/commands/on/token.d.ts +8 -0
  57. package/dist/src/cli/commands/on/token.d.ts.map +1 -0
  58. package/dist/src/cli/commands/on/token.js +26 -0
  59. package/dist/src/cli/commands/on/token.js.map +1 -0
  60. package/dist/src/cli/commands/on/workspace.d.ts +4 -0
  61. package/dist/src/cli/commands/on/workspace.d.ts.map +1 -0
  62. package/dist/src/cli/commands/on/workspace.js +245 -0
  63. package/dist/src/cli/commands/on/workspace.js.map +1 -0
  64. package/dist/src/cli/commands/on.d.ts +10 -0
  65. package/dist/src/cli/commands/on.d.ts.map +1 -0
  66. package/dist/src/cli/commands/on.js +52 -0
  67. package/dist/src/cli/commands/on.js.map +1 -0
  68. package/dist/src/cli/commands/setup.d.ts.map +1 -1
  69. package/dist/src/cli/commands/setup.js +10 -21
  70. package/dist/src/cli/commands/setup.js.map +1 -1
  71. package/dist/src/cli/lib/bridge.js +1 -1
  72. package/dist/src/cli/lib/bridge.js.map +1 -1
  73. package/dist/src/cli/lib/broker-lifecycle.d.ts +14 -4
  74. package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -1
  75. package/dist/src/cli/lib/broker-lifecycle.js +82 -120
  76. package/dist/src/cli/lib/broker-lifecycle.js.map +1 -1
  77. package/dist/src/cli/lib/client-factory.d.ts +4 -4
  78. package/dist/src/cli/lib/client-factory.d.ts.map +1 -1
  79. package/dist/src/cli/lib/client-factory.js +14 -11
  80. package/dist/src/cli/lib/client-factory.js.map +1 -1
  81. package/dist/src/cli/lib/core-maintenance.d.ts.map +1 -1
  82. package/dist/src/cli/lib/core-maintenance.js +11 -22
  83. package/dist/src/cli/lib/core-maintenance.js.map +1 -1
  84. package/dist/src/cost/pricing.d.ts +18 -0
  85. package/dist/src/cost/pricing.d.ts.map +1 -0
  86. package/dist/src/cost/pricing.js +111 -0
  87. package/dist/src/cost/pricing.js.map +1 -0
  88. package/dist/src/cost/tracker.d.ts +13 -0
  89. package/dist/src/cost/tracker.d.ts.map +1 -0
  90. package/dist/src/cost/tracker.js +152 -0
  91. package/dist/src/cost/tracker.js.map +1 -0
  92. package/dist/src/cost/types.d.ts +23 -0
  93. package/dist/src/cost/types.d.ts.map +1 -0
  94. package/dist/src/cost/types.js +2 -0
  95. package/dist/src/cost/types.js.map +1 -0
  96. package/package.json +15 -12
  97. package/packages/acp-bridge/package.json +2 -2
  98. package/packages/brand/package.json +1 -1
  99. package/packages/cloud/package.json +3 -3
  100. package/packages/config/package.json +1 -1
  101. package/packages/hooks/package.json +4 -4
  102. package/packages/memory/package.json +2 -2
  103. package/packages/openclaw/package.json +2 -2
  104. package/packages/policy/package.json +2 -2
  105. package/packages/sdk/README.md +10 -3
  106. package/packages/sdk/dist/broker-path.d.ts +3 -2
  107. package/packages/sdk/dist/broker-path.d.ts.map +1 -1
  108. package/packages/sdk/dist/broker-path.js +119 -32
  109. package/packages/sdk/dist/broker-path.js.map +1 -1
  110. package/packages/sdk/dist/client.d.ts +119 -197
  111. package/packages/sdk/dist/client.d.ts.map +1 -1
  112. package/packages/sdk/dist/client.js +354 -823
  113. package/packages/sdk/dist/client.js.map +1 -1
  114. package/packages/sdk/dist/examples/example.js +2 -5
  115. package/packages/sdk/dist/examples/example.js.map +1 -1
  116. package/packages/sdk/dist/index.d.ts +3 -1
  117. package/packages/sdk/dist/index.d.ts.map +1 -1
  118. package/packages/sdk/dist/index.js +3 -1
  119. package/packages/sdk/dist/index.js.map +1 -1
  120. package/packages/sdk/dist/relay-adapter.d.ts +9 -26
  121. package/packages/sdk/dist/relay-adapter.d.ts.map +1 -1
  122. package/packages/sdk/dist/relay-adapter.js +75 -47
  123. package/packages/sdk/dist/relay-adapter.js.map +1 -1
  124. package/packages/sdk/dist/relay.d.ts +26 -6
  125. package/packages/sdk/dist/relay.d.ts.map +1 -1
  126. package/packages/sdk/dist/relay.js +213 -43
  127. package/packages/sdk/dist/relay.js.map +1 -1
  128. package/packages/sdk/dist/transport.d.ts +58 -0
  129. package/packages/sdk/dist/transport.d.ts.map +1 -0
  130. package/packages/sdk/dist/transport.js +184 -0
  131. package/packages/sdk/dist/transport.js.map +1 -0
  132. package/packages/sdk/dist/types.d.ts +69 -0
  133. package/packages/sdk/dist/types.d.ts.map +1 -0
  134. package/packages/sdk/dist/types.js +5 -0
  135. package/packages/sdk/dist/types.js.map +1 -0
  136. package/packages/sdk/dist/workflows/__tests__/channel-messenger.test.d.ts +2 -0
  137. package/packages/sdk/dist/workflows/__tests__/channel-messenger.test.d.ts.map +1 -0
  138. package/packages/sdk/dist/workflows/__tests__/channel-messenger.test.js +117 -0
  139. package/packages/sdk/dist/workflows/__tests__/channel-messenger.test.js.map +1 -0
  140. package/packages/sdk/dist/workflows/__tests__/run-summary-table.test.js +4 -3
  141. package/packages/sdk/dist/workflows/__tests__/run-summary-table.test.js.map +1 -1
  142. package/packages/sdk/dist/workflows/__tests__/step-executor.test.d.ts +2 -0
  143. package/packages/sdk/dist/workflows/__tests__/step-executor.test.d.ts.map +1 -0
  144. package/packages/sdk/dist/workflows/__tests__/step-executor.test.js +378 -0
  145. package/packages/sdk/dist/workflows/__tests__/step-executor.test.js.map +1 -0
  146. package/packages/sdk/dist/workflows/__tests__/template-resolver.test.d.ts +2 -0
  147. package/packages/sdk/dist/workflows/__tests__/template-resolver.test.d.ts.map +1 -0
  148. package/packages/sdk/dist/workflows/__tests__/template-resolver.test.js +145 -0
  149. package/packages/sdk/dist/workflows/__tests__/template-resolver.test.js.map +1 -0
  150. package/packages/sdk/dist/workflows/__tests__/verification.test.d.ts +2 -0
  151. package/packages/sdk/dist/workflows/__tests__/verification.test.d.ts.map +1 -0
  152. package/packages/sdk/dist/workflows/__tests__/verification.test.js +170 -0
  153. package/packages/sdk/dist/workflows/__tests__/verification.test.js.map +1 -0
  154. package/packages/sdk/dist/workflows/builder.d.ts +3 -2
  155. package/packages/sdk/dist/workflows/builder.d.ts.map +1 -1
  156. package/packages/sdk/dist/workflows/builder.js +1 -3
  157. package/packages/sdk/dist/workflows/builder.js.map +1 -1
  158. package/packages/sdk/dist/workflows/channel-messenger.d.ts +28 -0
  159. package/packages/sdk/dist/workflows/channel-messenger.d.ts.map +1 -0
  160. package/packages/sdk/dist/workflows/channel-messenger.js +255 -0
  161. package/packages/sdk/dist/workflows/channel-messenger.js.map +1 -0
  162. package/packages/sdk/dist/workflows/index.d.ts +7 -0
  163. package/packages/sdk/dist/workflows/index.d.ts.map +1 -1
  164. package/packages/sdk/dist/workflows/index.js +7 -0
  165. package/packages/sdk/dist/workflows/index.js.map +1 -1
  166. package/packages/sdk/dist/workflows/process-spawner.d.ts +35 -0
  167. package/packages/sdk/dist/workflows/process-spawner.d.ts.map +1 -0
  168. package/packages/sdk/dist/workflows/process-spawner.js +141 -0
  169. package/packages/sdk/dist/workflows/process-spawner.js.map +1 -0
  170. package/packages/sdk/dist/workflows/run.d.ts +2 -1
  171. package/packages/sdk/dist/workflows/run.d.ts.map +1 -1
  172. package/packages/sdk/dist/workflows/run.js.map +1 -1
  173. package/packages/sdk/dist/workflows/runner.d.ts +6 -6
  174. package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
  175. package/packages/sdk/dist/workflows/runner.js +443 -719
  176. package/packages/sdk/dist/workflows/runner.js.map +1 -1
  177. package/packages/sdk/dist/workflows/step-executor.d.ts +95 -0
  178. package/packages/sdk/dist/workflows/step-executor.d.ts.map +1 -0
  179. package/packages/sdk/dist/workflows/step-executor.js +393 -0
  180. package/packages/sdk/dist/workflows/step-executor.js.map +1 -0
  181. package/packages/sdk/dist/workflows/template-resolver.d.ts +33 -0
  182. package/packages/sdk/dist/workflows/template-resolver.d.ts.map +1 -0
  183. package/packages/sdk/dist/workflows/template-resolver.js +144 -0
  184. package/packages/sdk/dist/workflows/template-resolver.js.map +1 -0
  185. package/packages/sdk/dist/workflows/validator.d.ts.map +1 -1
  186. package/packages/sdk/dist/workflows/validator.js +17 -2
  187. package/packages/sdk/dist/workflows/validator.js.map +1 -1
  188. package/packages/sdk/dist/workflows/verification.d.ts +33 -0
  189. package/packages/sdk/dist/workflows/verification.d.ts.map +1 -0
  190. package/packages/sdk/dist/workflows/verification.js +122 -0
  191. package/packages/sdk/dist/workflows/verification.js.map +1 -0
  192. package/packages/sdk/package.json +2 -2
  193. package/packages/sdk/src/__tests__/unit.test.ts +100 -1
  194. package/packages/sdk/src/broker-path.ts +136 -30
  195. package/packages/sdk/src/client.ts +453 -1069
  196. package/packages/sdk/src/examples/example.ts +2 -5
  197. package/packages/sdk/src/index.ts +9 -1
  198. package/packages/sdk/src/relay-adapter.ts +75 -55
  199. package/packages/sdk/src/relay.ts +262 -55
  200. package/packages/sdk/src/transport.ts +216 -0
  201. package/packages/sdk/src/types.ts +75 -0
  202. package/packages/sdk/src/workflows/__tests__/channel-messenger.test.ts +137 -0
  203. package/packages/sdk/src/workflows/__tests__/run-summary-table.test.ts +4 -3
  204. package/packages/sdk/src/workflows/__tests__/step-executor.test.ts +444 -0
  205. package/packages/sdk/src/workflows/__tests__/template-resolver.test.ts +162 -0
  206. package/packages/sdk/src/workflows/__tests__/verification.test.ts +229 -0
  207. package/packages/sdk/src/workflows/builder.ts +6 -6
  208. package/packages/sdk/src/workflows/channel-messenger.ts +314 -0
  209. package/packages/sdk/src/workflows/index.ts +12 -0
  210. package/packages/sdk/src/workflows/process-spawner.ts +201 -0
  211. package/packages/sdk/src/workflows/run.ts +2 -1
  212. package/packages/sdk/src/workflows/runner.ts +636 -951
  213. package/packages/sdk/src/workflows/step-executor.ts +579 -0
  214. package/packages/sdk/src/workflows/template-resolver.ts +180 -0
  215. package/packages/sdk/src/workflows/validator.ts +20 -2
  216. package/packages/sdk/src/workflows/verification.ts +184 -0
  217. package/packages/sdk-py/pyproject.toml +1 -1
  218. package/packages/sdk-py/src/agent_relay/__init__.py +0 -8
  219. package/packages/sdk-py/src/agent_relay/client.py +329 -522
  220. package/packages/sdk-py/src/agent_relay/protocol.py +2 -96
  221. package/packages/sdk-py/src/agent_relay/relay.py +1 -4
  222. package/packages/sdk-py/tests/test_wait_for_api_url.py +92 -0
  223. package/packages/sdk-py/uv.lock +5388 -0
  224. package/packages/telemetry/dist/client.d.ts.map +1 -1
  225. package/packages/telemetry/dist/client.js +1 -1
  226. package/packages/telemetry/dist/client.js.map +1 -1
  227. package/packages/telemetry/package.json +1 -1
  228. package/packages/telemetry/src/client.ts +3 -10
  229. package/packages/trajectory/package.json +2 -2
  230. package/packages/user-directory/package.json +2 -2
  231. package/packages/utils/package.json +2 -2
  232. package/scripts/postinstall.js +121 -1
@@ -0,0 +1,152 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { CLI_DEFAULT_MODEL, MODEL_PRICING, estimateCost, estimateTokensFromDuration, normalizeModel, } from './pricing.js';
5
+ const DEFAULT_USAGE_FILE_PATH = path.join(os.homedir(), '.agent-relay', 'usage.jsonl');
6
+ export class CostTracker {
7
+ usageFilePath;
8
+ startedSteps = new Map();
9
+ constructor(options = {}) {
10
+ this.usageFilePath = resolveUsageFilePath(options.usageFilePath);
11
+ }
12
+ stepStarted(runId, stepName, agent, cli) {
13
+ const startedAt = new Date();
14
+ this.startedSteps.set(this.getStepKey(runId, stepName), {
15
+ runId,
16
+ stepName,
17
+ agent,
18
+ cli,
19
+ model: resolveModel(agent, cli),
20
+ startedAt: startedAt.toISOString(),
21
+ startedAtMs: startedAt.getTime(),
22
+ });
23
+ }
24
+ stepCompleted(runId, stepName, _exitCode) {
25
+ const stepKey = this.getStepKey(runId, stepName);
26
+ const startedStep = this.startedSteps.get(stepKey);
27
+ if (!startedStep) {
28
+ throw new Error(`No started step found for run "${runId}" and step "${stepName}"`);
29
+ }
30
+ const endedAt = new Date();
31
+ const durationMs = Math.max(0, endedAt.getTime() - startedStep.startedAtMs);
32
+ const tokenEstimate = estimateTokensFromDuration(durationMs);
33
+ const record = {
34
+ runId: startedStep.runId,
35
+ stepName: startedStep.stepName,
36
+ agent: startedStep.agent,
37
+ cli: startedStep.cli,
38
+ model: startedStep.model,
39
+ startedAt: startedStep.startedAt,
40
+ endedAt: endedAt.toISOString(),
41
+ durationMs,
42
+ estimatedInputTokens: tokenEstimate.inputTokens,
43
+ estimatedOutputTokens: tokenEstimate.outputTokens,
44
+ estimatedCostUsd: estimateCost(startedStep.model, tokenEstimate.inputTokens, tokenEstimate.outputTokens),
45
+ };
46
+ this.appendRecord(record);
47
+ this.startedSteps.delete(stepKey);
48
+ return record;
49
+ }
50
+ getRunSummary(runId) {
51
+ const steps = this.readRecords()
52
+ .filter((record) => record.runId === runId)
53
+ .sort((left, right) => left.startedAt.localeCompare(right.startedAt));
54
+ const totalCostUsd = roundUsd(steps.reduce((sum, step) => sum + step.estimatedCostUsd, 0));
55
+ const totalDurationMs = steps.reduce((sum, step) => sum + step.durationMs, 0);
56
+ return {
57
+ runId,
58
+ totalCostUsd,
59
+ totalDurationMs,
60
+ steps,
61
+ };
62
+ }
63
+ appendRecord(record) {
64
+ fs.mkdirSync(path.dirname(this.usageFilePath), { recursive: true, mode: 0o700 });
65
+ fs.appendFileSync(this.usageFilePath, `${JSON.stringify(record)}\n`, { encoding: 'utf8', mode: 0o600 });
66
+ }
67
+ getStepKey(runId, stepName) {
68
+ return `${runId}:${stepName}`;
69
+ }
70
+ readRecords() {
71
+ if (!fs.existsSync(this.usageFilePath)) {
72
+ return [];
73
+ }
74
+ const raw = fs.readFileSync(this.usageFilePath, 'utf8').trim();
75
+ if (!raw) {
76
+ return [];
77
+ }
78
+ const records = [];
79
+ for (const line of raw.split('\n')) {
80
+ try {
81
+ const parsed = JSON.parse(line);
82
+ if (isStepCostRecord(parsed)) {
83
+ records.push(parsed);
84
+ }
85
+ }
86
+ catch {
87
+ // Ignore malformed lines so older or partial records do not block summaries.
88
+ }
89
+ }
90
+ return records;
91
+ }
92
+ }
93
+ function resolveUsageFilePath(usageFilePath) {
94
+ if (!usageFilePath) {
95
+ return DEFAULT_USAGE_FILE_PATH;
96
+ }
97
+ if (usageFilePath === '~') {
98
+ return os.homedir();
99
+ }
100
+ if (/^~[\\/]/.test(usageFilePath)) {
101
+ return path.join(os.homedir(), usageFilePath.slice(2));
102
+ }
103
+ return usageFilePath;
104
+ }
105
+ function resolveModel(agent, cli) {
106
+ const normalizedAgent = normalizeValue(agent);
107
+ if (normalizedAgent) {
108
+ const resolved = normalizeModel(normalizedAgent);
109
+ if (Object.hasOwn(MODEL_PRICING, resolved)) {
110
+ return resolved;
111
+ }
112
+ }
113
+ const normalizedCli = normalizeCli(cli);
114
+ if (normalizedCli && Object.hasOwn(CLI_DEFAULT_MODEL, normalizedCli)) {
115
+ return CLI_DEFAULT_MODEL[normalizedCli];
116
+ }
117
+ return normalizedAgent || 'unknown';
118
+ }
119
+ function normalizeCli(cli) {
120
+ const normalized = normalizeValue(cli);
121
+ if (!normalized) {
122
+ return '';
123
+ }
124
+ const [command] = normalized.split(/\s+/, 1);
125
+ const binary = path.basename(command);
126
+ const [family] = binary.split(':', 1);
127
+ return family;
128
+ }
129
+ function normalizeValue(value) {
130
+ return value.trim().toLowerCase();
131
+ }
132
+ function roundUsd(value) {
133
+ return Math.round(value * 1_000_000) / 1_000_000;
134
+ }
135
+ function isStepCostRecord(value) {
136
+ if (!value || typeof value !== 'object') {
137
+ return false;
138
+ }
139
+ const record = value;
140
+ return (typeof record.runId === 'string' &&
141
+ typeof record.stepName === 'string' &&
142
+ typeof record.agent === 'string' &&
143
+ typeof record.cli === 'string' &&
144
+ typeof record.model === 'string' &&
145
+ typeof record.startedAt === 'string' &&
146
+ typeof record.endedAt === 'string' &&
147
+ typeof record.durationMs === 'number' &&
148
+ typeof record.estimatedInputTokens === 'number' &&
149
+ typeof record.estimatedOutputTokens === 'number' &&
150
+ typeof record.estimatedCostUsd === 'number');
151
+ }
152
+ //# sourceMappingURL=tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../../src/cost/tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface StepCostRecord {
2
+ runId: string;
3
+ stepName: string;
4
+ agent: string;
5
+ cli: string;
6
+ model: string;
7
+ startedAt: string;
8
+ endedAt: string;
9
+ durationMs: number;
10
+ estimatedInputTokens: number;
11
+ estimatedOutputTokens: number;
12
+ estimatedCostUsd: number;
13
+ }
14
+ export interface RunCostSummary {
15
+ runId: string;
16
+ totalCostUsd: number;
17
+ totalDurationMs: number;
18
+ steps: StepCostRecord[];
19
+ }
20
+ export interface CostTrackerOptions {
21
+ usageFilePath?: string;
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cost/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cost/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-relay",
3
- "version": "3.2.22",
3
+ "version": "4.0.1",
4
4
  "description": "Real-time agent-to-agent communication system",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -177,18 +177,21 @@
177
177
  },
178
178
  "homepage": "https://github.com/AgentWorkforce/relay#readme",
179
179
  "dependencies": {
180
- "@agent-relay/cloud": "3.2.22",
181
- "@agent-relay/config": "3.2.22",
182
- "@agent-relay/hooks": "3.2.22",
183
- "@agent-relay/sdk": "3.2.22",
184
- "@aws-sdk/client-s3": "^3.1004.0",
185
- "@agent-relay/telemetry": "3.2.22",
186
- "@agent-relay/trajectory": "3.2.22",
187
- "@agent-relay/user-directory": "3.2.22",
188
- "@agent-relay/utils": "3.2.22",
180
+ "@agent-relay/cloud": "4.0.1",
181
+ "@agent-relay/config": "4.0.1",
182
+ "@agent-relay/hooks": "4.0.1",
183
+ "@agent-relay/sdk": "4.0.1",
184
+ "@agent-relay/telemetry": "4.0.1",
185
+ "@agent-relay/trajectory": "4.0.1",
186
+ "@agent-relay/user-directory": "4.0.1",
187
+ "@agent-relay/utils": "4.0.1",
188
+ "@aws-sdk/client-s3": "3.1020.0",
189
189
  "@modelcontextprotocol/sdk": "^1.0.0",
190
+ "@relayauth/core": "^0.1.2",
191
+ "@relayauth/sdk": "^0.1.2",
190
192
  "@relaycast/mcp": "1.0.0",
191
193
  "@relaycast/sdk": "1.0.0",
194
+ "@relayfile/sdk": "^0.1.2",
192
195
  "@sinclair/typebox": "^0.34.14",
193
196
  "chalk": "^4.1.2",
194
197
  "chokidar": "^5.0.0",
@@ -198,13 +201,13 @@
198
201
  "dotenv": "^17.2.3",
199
202
  "express": "^5.2.1",
200
203
  "http-proxy-middleware": "^3.0.5",
201
- "listr2": "^10.2.1",
202
204
  "ignore": "^7.0.5",
205
+ "listr2": "^10.2.1",
203
206
  "pg": "^8.16.3",
204
207
  "posthog-node": "^4.0.1",
205
208
  "smol-toml": "^1.6.0",
206
- "tar": "^7.5.10",
207
209
  "ssh2": "^1.17.0",
210
+ "tar": "^7.5.10",
208
211
  "uuid": "^10.0.0",
209
212
  "ws": "^8.18.3",
210
213
  "yaml": "^2.7.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/acp-bridge",
3
- "version": "3.2.22",
3
+ "version": "4.0.1",
4
4
  "description": "ACP (Agent Client Protocol) bridge for Agent Relay - expose relay agents to ACP-compatible editors like Zed",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -46,7 +46,7 @@
46
46
  "access": "public"
47
47
  },
48
48
  "dependencies": {
49
- "@agent-relay/sdk": "3.2.22",
49
+ "@agent-relay/sdk": "4.0.1",
50
50
  "@agentclientprotocol/sdk": "^0.12.0"
51
51
  },
52
52
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/brand",
3
- "version": "3.2.22",
3
+ "version": "4.0.1",
4
4
  "description": "Shared brand tokens, CSS variables, and color system for Agent Relay and associated properties",
5
5
  "main": "brand.css",
6
6
  "style": "brand.css",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/cloud",
3
- "version": "3.2.22",
3
+ "version": "4.0.1",
4
4
  "description": "Cloud SDK for Agent Relay — auth, workflow execution, and provider connections",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -23,8 +23,8 @@
23
23
  "test:watch": "vitest"
24
24
  },
25
25
  "dependencies": {
26
- "@agent-relay/config": "3.2.22",
27
- "@aws-sdk/client-s3": "^3.1004.0",
26
+ "@agent-relay/config": "4.0.1",
27
+ "@aws-sdk/client-s3": "3.1020.0",
28
28
  "ignore": "^7.0.5",
29
29
  "tar": "^7.5.10"
30
30
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/config",
3
- "version": "3.2.22",
3
+ "version": "4.0.1",
4
4
  "description": "Shared configuration schemas and loaders for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/hooks",
3
- "version": "3.2.22",
3
+ "version": "4.0.1",
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/config": "3.2.22",
41
- "@agent-relay/trajectory": "3.2.22",
42
- "@agent-relay/sdk": "3.2.22"
40
+ "@agent-relay/config": "4.0.1",
41
+ "@agent-relay/trajectory": "4.0.1",
42
+ "@agent-relay/sdk": "4.0.1"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/memory",
3
- "version": "3.2.22",
3
+ "version": "4.0.1",
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": "3.2.22"
25
+ "@agent-relay/hooks": "4.0.1"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/openclaw",
3
- "version": "3.2.22",
3
+ "version": "4.0.1",
4
4
  "description": "Relaycast bridge for OpenClaw — messaging, identity, runtime setup, and local spawning",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -29,7 +29,7 @@
29
29
  "postinstall": "node -e \"try{require('child_process').execSync('ldd --version 2>&1',{stdio:'pipe'})}catch{try{require('child_process').execSync('apk info gcompat 2>/dev/null',{stdio:'pipe'})}catch{console.warn('\\n\\u26a0\\ufe0f @agent-relay/openclaw: Alpine detected without gcompat. Spawning requires glibc.\\n Install with: apk add gcompat libstdc++\\n')}}\""
30
30
  },
31
31
  "dependencies": {
32
- "@agent-relay/sdk": "3.2.22",
32
+ "@agent-relay/sdk": "4.0.1",
33
33
  "@relaycast/sdk": "^1.0.0",
34
34
  "ws": "^8.0.0"
35
35
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/policy",
3
- "version": "3.2.22",
3
+ "version": "4.0.1",
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": "3.2.22"
25
+ "@agent-relay/config": "4.0.1"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -80,11 +80,18 @@ For direct broker control:
80
80
  ```ts
81
81
  import { AgentRelayClient } from '@agent-relay/sdk';
82
82
 
83
- const client = await AgentRelayClient.start({
84
- binaryPath: '/path/to/agent-relay-broker', // optional, auto-detected
83
+ // Spawn a local broker and connect over HTTP/WS
84
+ const client = await AgentRelayClient.spawn({
85
+ cwd: '/my/project',
85
86
  channels: ['general'],
86
87
  });
87
88
 
89
+ // Or connect to an already-running broker (reads connection.json)
90
+ // const client = AgentRelayClient.connect({ cwd: '/my/project' });
91
+
92
+ // Or connect to a remote broker directly
93
+ // const client = new AgentRelayClient({ baseUrl: 'http://...', apiKey: 'br_...' });
94
+
88
95
  await client.spawnPty({
89
96
  name: 'Worker1',
90
97
  cli: 'claude',
@@ -104,7 +111,7 @@ Use provider-first spawn helpers and set `transport` when you want headless mode
104
111
  ```ts
105
112
  import { AgentRelayClient } from '@agent-relay/sdk';
106
113
 
107
- const client = await AgentRelayClient.start({
114
+ const client = await AgentRelayClient.spawn({
108
115
  channels: ['general'],
109
116
  });
110
117
 
@@ -9,9 +9,10 @@
9
9
  * Resolve the agent-relay-broker binary path.
10
10
  *
11
11
  * Search order:
12
- * 1. SDK's bin/ directory (resolved via createRequire or import.meta.url)
12
+ * 1. SDK's bin/ directory (resolved via CJS globals, createRequire, or import.meta.url)
13
13
  * 2. Platform-specific name (agent-relay-broker-{platform}-{arch}) in bin/
14
- * 3. PATH lookup via `which` / `where`
14
+ * 3. Common Cargo development paths (target/release and target/debug)
15
+ * 4. PATH lookup via `which` / `where`
15
16
  *
16
17
  * @returns Absolute path to the broker binary, or null if not found
17
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"broker-path.d.ts","sourceRoot":"","sources":["../src/broker-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CA+CnD"}
1
+ {"version":3,"file":"broker-path.d.ts","sourceRoot":"","sources":["../src/broker-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuHH;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CA2CnD"}
@@ -6,61 +6,148 @@
6
6
  * const binPath = getBrokerBinaryPath();
7
7
  */
8
8
  import { existsSync } from 'node:fs';
9
- import { join, dirname } from 'node:path';
10
- import { execSync } from 'node:child_process';
9
+ import { join, dirname, resolve } from 'node:path';
10
+ import { execFileSync } from 'node:child_process';
11
11
  import { createRequire } from 'node:module';
12
12
  import { fileURLToPath } from 'node:url';
13
13
  const BROKER_NAME = 'agent-relay-broker';
14
+ function addUniquePath(paths, candidate) {
15
+ if (!candidate || paths.includes(candidate)) {
16
+ return;
17
+ }
18
+ paths.push(candidate);
19
+ }
20
+ function getImportMetaUrl() {
21
+ try {
22
+ return import.meta.url;
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ function getCurrentModuleDir() {
29
+ if (typeof __dirname === 'string' && __dirname) {
30
+ return __dirname;
31
+ }
32
+ if (typeof __filename === 'string' && __filename) {
33
+ return dirname(__filename);
34
+ }
35
+ const importMetaUrl = getImportMetaUrl();
36
+ if (!importMetaUrl) {
37
+ return null;
38
+ }
39
+ try {
40
+ return dirname(fileURLToPath(importMetaUrl));
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ }
46
+ function getCurrentModuleReference() {
47
+ if (typeof __filename === 'string' && __filename) {
48
+ return __filename;
49
+ }
50
+ if (typeof __dirname === 'string' && __dirname) {
51
+ return join(__dirname, 'broker-path.js');
52
+ }
53
+ return getImportMetaUrl();
54
+ }
55
+ function getSdkBinDirs() {
56
+ const binDirs = [];
57
+ const currentModuleDir = getCurrentModuleDir();
58
+ if (currentModuleDir) {
59
+ addUniquePath(binDirs, resolve(currentModuleDir, '..', 'bin'));
60
+ }
61
+ const currentModuleReference = getCurrentModuleReference();
62
+ if (currentModuleReference) {
63
+ try {
64
+ const sdkEntry = createRequire(currentModuleReference).resolve('@agent-relay/sdk');
65
+ addUniquePath(binDirs, resolve(dirname(sdkEntry), '..', 'bin'));
66
+ }
67
+ catch {
68
+ // Continue with other resolution strategies.
69
+ }
70
+ }
71
+ const importMetaUrl = getImportMetaUrl();
72
+ if (importMetaUrl) {
73
+ try {
74
+ addUniquePath(binDirs, resolve(dirname(fileURLToPath(importMetaUrl)), '..', 'bin'));
75
+ }
76
+ catch {
77
+ // Continue with other resolution strategies.
78
+ }
79
+ }
80
+ return binDirs;
81
+ }
82
+ function getDevelopmentBinaryPaths(ext, binDirs) {
83
+ const binaryPaths = [];
84
+ const repoRoots = new Set();
85
+ const addRepoRoot = (candidate) => {
86
+ if (!candidate) {
87
+ return;
88
+ }
89
+ const repoRoot = resolve(candidate);
90
+ if (repoRoots.has(repoRoot)) {
91
+ return;
92
+ }
93
+ repoRoots.add(repoRoot);
94
+ addUniquePath(binaryPaths, join(repoRoot, 'target', 'release', `${BROKER_NAME}${ext}`));
95
+ addUniquePath(binaryPaths, join(repoRoot, 'target', 'debug', `${BROKER_NAME}${ext}`));
96
+ };
97
+ addRepoRoot(process.cwd());
98
+ const currentModuleDir = getCurrentModuleDir();
99
+ if (currentModuleDir) {
100
+ addRepoRoot(resolve(currentModuleDir, '..', '..', '..'));
101
+ }
102
+ for (const binDir of binDirs) {
103
+ addRepoRoot(resolve(binDir, '..', '..', '..'));
104
+ }
105
+ return binaryPaths;
106
+ }
14
107
  /**
15
108
  * Resolve the agent-relay-broker binary path.
16
109
  *
17
110
  * Search order:
18
- * 1. SDK's bin/ directory (resolved via createRequire or import.meta.url)
111
+ * 1. SDK's bin/ directory (resolved via CJS globals, createRequire, or import.meta.url)
19
112
  * 2. Platform-specific name (agent-relay-broker-{platform}-{arch}) in bin/
20
- * 3. PATH lookup via `which` / `where`
113
+ * 3. Common Cargo development paths (target/release and target/debug)
114
+ * 4. PATH lookup via `which` / `where`
21
115
  *
22
116
  * @returns Absolute path to the broker binary, or null if not found
23
117
  */
24
118
  export function getBrokerBinaryPath() {
25
- let binDir = null;
26
- try {
27
- // Use createRequire for ESM-compatible require.resolve
28
- const esmRequire = createRequire(import.meta.url);
29
- const sdkEntry = esmRequire.resolve('@agent-relay/sdk');
30
- binDir = join(dirname(sdkEntry), '..', 'bin');
31
- }
32
- catch {
33
- try {
34
- // Fallback: derive from import.meta.url
35
- binDir = join(dirname(dirname(fileURLToPath(import.meta.url))), 'bin');
36
- }
37
- catch {
38
- // Neither method worked
39
- }
40
- }
41
- if (!binDir)
42
- return null;
43
119
  const ext = process.platform === 'win32' ? '.exe' : '';
120
+ const binDirs = getSdkBinDirs();
121
+ const platformSpecific = `${BROKER_NAME}-${process.platform}-${process.arch}${ext}`;
44
122
  // 1. Exact name in bin/
45
- const exactPath = join(binDir, `${BROKER_NAME}${ext}`);
46
- if (existsSync(exactPath)) {
47
- return exactPath;
123
+ for (const binDir of binDirs) {
124
+ const exactPath = join(binDir, `${BROKER_NAME}${ext}`);
125
+ if (existsSync(exactPath)) {
126
+ return exactPath;
127
+ }
48
128
  }
49
129
  // 2. Platform-specific name in bin/
50
- const platformSpecific = `${BROKER_NAME}-${process.platform}-${process.arch}${ext}`;
51
- const platformPath = join(binDir, platformSpecific);
52
- if (existsSync(platformPath)) {
53
- return platformPath;
130
+ for (const binDir of binDirs) {
131
+ const platformPath = join(binDir, platformSpecific);
132
+ if (existsSync(platformPath)) {
133
+ return platformPath;
134
+ }
135
+ }
136
+ // 3. Common development paths for local Cargo builds.
137
+ for (const developmentPath of getDevelopmentBinaryPaths(ext, binDirs)) {
138
+ if (existsSync(developmentPath)) {
139
+ return developmentPath;
140
+ }
54
141
  }
55
- // 3. PATH lookup
142
+ // 4. PATH lookup
56
143
  try {
57
144
  const cmd = process.platform === 'win32' ? 'where' : 'which';
58
- const result = execSync(`${cmd} ${BROKER_NAME}`, {
145
+ const result = execFileSync(cmd, [BROKER_NAME], {
59
146
  encoding: 'utf-8',
60
147
  stdio: ['pipe', 'pipe', 'pipe'],
61
148
  }).trim();
62
149
  if (result) {
63
- return result.split('\n')[0].trim();
150
+ return result.split(/\r?\n/u)[0].trim();
64
151
  }
65
152
  }
66
153
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"broker-path.js","sourceRoot":"","sources":["../src/broker-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEzC;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB;IACjC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,CAAC;QACH,uDAAuD;QACvD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACxD,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,wCAAwC;YACxC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvD,wBAAwB;IACxB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,GAAG,GAAG,EAAE,CAAC,CAAC;IACvD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,oCAAoC;IACpC,MAAM,gBAAgB,GAAG,GAAG,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;IACpF,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,iBAAiB;IACjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,GAAG,IAAI,WAAW,EAAE,EAAE;YAC/C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"broker-path.js","sourceRoot":"","sources":["../src/broker-path.ts"],"names":[],"mappings":"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"}