agent-relay 4.0.0 → 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.
- package/README.md +5 -5
- package/bin/agent-relay-broker-darwin-arm64 +0 -0
- package/bin/agent-relay-broker-darwin-x64 +0 -0
- package/bin/agent-relay-broker-linux-arm64 +0 -0
- package/bin/agent-relay-broker-linux-x64 +0 -0
- package/dist/index.cjs +1980 -1024
- package/dist/src/cli/commands/core.d.ts.map +1 -1
- package/dist/src/cli/commands/core.js +4 -3
- package/dist/src/cli/commands/core.js.map +1 -1
- package/dist/src/cli/commands/on/relayfile-binary.d.ts +2 -0
- package/dist/src/cli/commands/on/relayfile-binary.d.ts.map +1 -0
- package/dist/src/cli/commands/on/relayfile-binary.js +208 -0
- package/dist/src/cli/commands/on/relayfile-binary.js.map +1 -0
- package/dist/src/cli/commands/on/start.d.ts.map +1 -1
- package/dist/src/cli/commands/on/start.js +62 -26
- package/dist/src/cli/commands/on/start.js.map +1 -1
- package/dist/src/cli/commands/on/workspace.d.ts.map +1 -1
- package/dist/src/cli/commands/on/workspace.js +4 -0
- package/dist/src/cli/commands/on/workspace.js.map +1 -1
- package/dist/src/cli/commands/on.js +1 -1
- package/dist/src/cli/commands/on.js.map +1 -1
- package/dist/src/cli/lib/client-factory.d.ts +2 -2
- package/dist/src/cli/lib/client-factory.d.ts.map +1 -1
- package/dist/src/cli/lib/client-factory.js.map +1 -1
- package/dist/src/cost/pricing.d.ts +18 -0
- package/dist/src/cost/pricing.d.ts.map +1 -0
- package/dist/src/cost/pricing.js +111 -0
- package/dist/src/cost/pricing.js.map +1 -0
- package/dist/src/cost/tracker.d.ts +13 -0
- package/dist/src/cost/tracker.d.ts.map +1 -0
- package/dist/src/cost/tracker.js +152 -0
- package/dist/src/cost/tracker.js.map +1 -0
- package/dist/src/cost/types.d.ts +23 -0
- package/dist/src/cost/types.d.ts.map +1 -0
- package/dist/src/cost/types.js +2 -0
- package/dist/src/cost/types.js.map +1 -0
- package/package.json +10 -10
- package/packages/acp-bridge/package.json +2 -2
- package/packages/brand/package.json +1 -1
- package/packages/cloud/package.json +3 -3
- package/packages/config/package.json +1 -1
- package/packages/hooks/package.json +4 -4
- package/packages/memory/package.json +2 -2
- package/packages/openclaw/package.json +2 -2
- package/packages/policy/package.json +2 -2
- package/packages/sdk/dist/broker-path.d.ts +3 -2
- package/packages/sdk/dist/broker-path.d.ts.map +1 -1
- package/packages/sdk/dist/broker-path.js +119 -32
- package/packages/sdk/dist/broker-path.js.map +1 -1
- package/packages/sdk/dist/client.d.ts +12 -2
- package/packages/sdk/dist/client.d.ts.map +1 -1
- package/packages/sdk/dist/client.js +20 -1
- package/packages/sdk/dist/client.js.map +1 -1
- package/packages/sdk/dist/index.d.ts +1 -1
- package/packages/sdk/dist/index.d.ts.map +1 -1
- package/packages/sdk/dist/index.js.map +1 -1
- package/packages/sdk/dist/relay.d.ts +2 -1
- package/packages/sdk/dist/relay.d.ts.map +1 -1
- package/packages/sdk/dist/relay.js +1 -1
- package/packages/sdk/dist/relay.js.map +1 -1
- package/packages/sdk/dist/workflows/__tests__/channel-messenger.test.d.ts +2 -0
- package/packages/sdk/dist/workflows/__tests__/channel-messenger.test.d.ts.map +1 -0
- package/packages/sdk/dist/workflows/__tests__/channel-messenger.test.js +117 -0
- package/packages/sdk/dist/workflows/__tests__/channel-messenger.test.js.map +1 -0
- package/packages/sdk/dist/workflows/__tests__/run-summary-table.test.js +4 -3
- package/packages/sdk/dist/workflows/__tests__/run-summary-table.test.js.map +1 -1
- package/packages/sdk/dist/workflows/__tests__/step-executor.test.d.ts +2 -0
- package/packages/sdk/dist/workflows/__tests__/step-executor.test.d.ts.map +1 -0
- package/packages/sdk/dist/workflows/__tests__/step-executor.test.js +378 -0
- package/packages/sdk/dist/workflows/__tests__/step-executor.test.js.map +1 -0
- package/packages/sdk/dist/workflows/__tests__/template-resolver.test.d.ts +2 -0
- package/packages/sdk/dist/workflows/__tests__/template-resolver.test.d.ts.map +1 -0
- package/packages/sdk/dist/workflows/__tests__/template-resolver.test.js +145 -0
- package/packages/sdk/dist/workflows/__tests__/template-resolver.test.js.map +1 -0
- package/packages/sdk/dist/workflows/__tests__/verification.test.d.ts +2 -0
- package/packages/sdk/dist/workflows/__tests__/verification.test.d.ts.map +1 -0
- package/packages/sdk/dist/workflows/__tests__/verification.test.js +170 -0
- package/packages/sdk/dist/workflows/__tests__/verification.test.js.map +1 -0
- package/packages/sdk/dist/workflows/builder.d.ts +3 -2
- package/packages/sdk/dist/workflows/builder.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/builder.js +1 -3
- package/packages/sdk/dist/workflows/builder.js.map +1 -1
- package/packages/sdk/dist/workflows/channel-messenger.d.ts +28 -0
- package/packages/sdk/dist/workflows/channel-messenger.d.ts.map +1 -0
- package/packages/sdk/dist/workflows/channel-messenger.js +255 -0
- package/packages/sdk/dist/workflows/channel-messenger.js.map +1 -0
- package/packages/sdk/dist/workflows/index.d.ts +7 -0
- package/packages/sdk/dist/workflows/index.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/index.js +7 -0
- package/packages/sdk/dist/workflows/index.js.map +1 -1
- package/packages/sdk/dist/workflows/process-spawner.d.ts +35 -0
- package/packages/sdk/dist/workflows/process-spawner.d.ts.map +1 -0
- package/packages/sdk/dist/workflows/process-spawner.js +141 -0
- package/packages/sdk/dist/workflows/process-spawner.js.map +1 -0
- package/packages/sdk/dist/workflows/run.d.ts +2 -1
- package/packages/sdk/dist/workflows/run.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/run.js.map +1 -1
- package/packages/sdk/dist/workflows/runner.d.ts +6 -6
- package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/runner.js +443 -719
- package/packages/sdk/dist/workflows/runner.js.map +1 -1
- package/packages/sdk/dist/workflows/step-executor.d.ts +95 -0
- package/packages/sdk/dist/workflows/step-executor.d.ts.map +1 -0
- package/packages/sdk/dist/workflows/step-executor.js +393 -0
- package/packages/sdk/dist/workflows/step-executor.js.map +1 -0
- package/packages/sdk/dist/workflows/template-resolver.d.ts +33 -0
- package/packages/sdk/dist/workflows/template-resolver.d.ts.map +1 -0
- package/packages/sdk/dist/workflows/template-resolver.js +144 -0
- package/packages/sdk/dist/workflows/template-resolver.js.map +1 -0
- package/packages/sdk/dist/workflows/verification.d.ts +33 -0
- package/packages/sdk/dist/workflows/verification.d.ts.map +1 -0
- package/packages/sdk/dist/workflows/verification.js +122 -0
- package/packages/sdk/dist/workflows/verification.js.map +1 -0
- package/packages/sdk/package.json +2 -2
- package/packages/sdk/src/broker-path.ts +136 -30
- package/packages/sdk/src/client.ts +37 -3
- package/packages/sdk/src/index.ts +1 -0
- package/packages/sdk/src/relay.ts +6 -2
- package/packages/sdk/src/workflows/__tests__/channel-messenger.test.ts +137 -0
- package/packages/sdk/src/workflows/__tests__/run-summary-table.test.ts +4 -3
- package/packages/sdk/src/workflows/__tests__/step-executor.test.ts +444 -0
- package/packages/sdk/src/workflows/__tests__/template-resolver.test.ts +162 -0
- package/packages/sdk/src/workflows/__tests__/verification.test.ts +229 -0
- package/packages/sdk/src/workflows/builder.ts +6 -6
- package/packages/sdk/src/workflows/channel-messenger.ts +314 -0
- package/packages/sdk/src/workflows/index.ts +12 -0
- package/packages/sdk/src/workflows/process-spawner.ts +201 -0
- package/packages/sdk/src/workflows/run.ts +2 -1
- package/packages/sdk/src/workflows/runner.ts +636 -951
- package/packages/sdk/src/workflows/step-executor.ts +579 -0
- package/packages/sdk/src/workflows/template-resolver.ts +180 -0
- package/packages/sdk/src/workflows/verification.ts +184 -0
- package/packages/sdk-py/pyproject.toml +1 -1
- 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 +2 -2
|
@@ -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 @@
|
|
|
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": "4.0.
|
|
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,15 +177,15 @@
|
|
|
177
177
|
},
|
|
178
178
|
"homepage": "https://github.com/AgentWorkforce/relay#readme",
|
|
179
179
|
"dependencies": {
|
|
180
|
-
"@agent-relay/cloud": "4.0.
|
|
181
|
-
"@agent-relay/config": "4.0.
|
|
182
|
-
"@agent-relay/hooks": "4.0.
|
|
183
|
-
"@agent-relay/sdk": "4.0.
|
|
184
|
-
"@agent-relay/telemetry": "4.0.
|
|
185
|
-
"@agent-relay/trajectory": "4.0.
|
|
186
|
-
"@agent-relay/user-directory": "4.0.
|
|
187
|
-
"@agent-relay/utils": "4.0.
|
|
188
|
-
"@aws-sdk/client-s3": "
|
|
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
190
|
"@relayauth/core": "^0.1.2",
|
|
191
191
|
"@relayauth/sdk": "^0.1.2",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/acp-bridge",
|
|
3
|
-
"version": "4.0.
|
|
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": "4.0.
|
|
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/cloud",
|
|
3
|
-
"version": "4.0.
|
|
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": "4.0.
|
|
27
|
-
"@aws-sdk/client-s3": "
|
|
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/hooks",
|
|
3
|
-
"version": "4.0.
|
|
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": "4.0.
|
|
41
|
-
"@agent-relay/trajectory": "4.0.
|
|
42
|
-
"@agent-relay/sdk": "4.0.
|
|
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": "4.0.
|
|
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": "4.0.
|
|
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": "4.0.
|
|
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": "4.0.
|
|
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": "4.0.
|
|
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": "4.0.
|
|
25
|
+
"@agent-relay/config": "4.0.1"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/node": "^22.19.3",
|
|
@@ -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.
|
|
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;
|
|
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 {
|
|
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.
|
|
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
|
|
46
|
-
|
|
47
|
-
|
|
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
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
//
|
|
142
|
+
// 4. PATH lookup
|
|
56
143
|
try {
|
|
57
144
|
const cmd = process.platform === 'win32' ? 'where' : 'which';
|
|
58
|
-
const result =
|
|
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(
|
|
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;
|
|
1
|
+
{"version":3,"file":"broker-path.js","sourceRoot":"","sources":["../src/broker-path.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,11 +17,21 @@ export interface AgentRelayClientOptions {
|
|
|
17
17
|
/** Timeout in ms for HTTP requests. Default: 30000. */
|
|
18
18
|
requestTimeoutMs?: number;
|
|
19
19
|
}
|
|
20
|
+
export interface AgentRelayBrokerInitArgs {
|
|
21
|
+
/** Optional HTTP API port for dashboard proxy (0 = disabled). */
|
|
22
|
+
apiPort?: number;
|
|
23
|
+
/** Bind address for the HTTP API. Defaults to 127.0.0.1 in the broker. */
|
|
24
|
+
apiBind?: string;
|
|
25
|
+
/** Enable persistence for broker state under the working directory. */
|
|
26
|
+
persist?: boolean;
|
|
27
|
+
/** Override the directory used for broker state files. */
|
|
28
|
+
stateDir?: string;
|
|
29
|
+
}
|
|
20
30
|
export interface AgentRelaySpawnOptions {
|
|
21
31
|
/** Path to the agent-relay-broker binary. Auto-resolved if omitted. */
|
|
22
32
|
binaryPath?: string;
|
|
23
|
-
/**
|
|
24
|
-
binaryArgs?:
|
|
33
|
+
/** Structured options mapped to the broker's Rust `init` CLI flags. */
|
|
34
|
+
binaryArgs?: AgentRelayBrokerInitArgs;
|
|
25
35
|
/** Broker name. Defaults to cwd basename. */
|
|
26
36
|
brokerName?: string;
|
|
27
37
|
/** Default channels for spawned agents. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAEV,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACV,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|