@clawcrony/claw-crony 1.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/LICENSE +21 -0
- package/README.md +82 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +720 -0
- package/dist/index.js.map +1 -0
- package/dist/src/agent-card.d.ts +4 -0
- package/dist/src/agent-card.d.ts.map +1 -0
- package/dist/src/agent-card.js +61 -0
- package/dist/src/agent-card.js.map +1 -0
- package/dist/src/audit.d.ts +36 -0
- package/dist/src/audit.d.ts.map +1 -0
- package/dist/src/audit.js +88 -0
- package/dist/src/audit.js.map +1 -0
- package/dist/src/client.d.ts +53 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +322 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/executor.d.ts +34 -0
- package/dist/src/executor.d.ts.map +1 -0
- package/dist/src/executor.js +994 -0
- package/dist/src/executor.js.map +1 -0
- package/dist/src/file-security.d.ts +63 -0
- package/dist/src/file-security.d.ts.map +1 -0
- package/dist/src/file-security.js +350 -0
- package/dist/src/file-security.js.map +1 -0
- package/dist/src/hub-match.d.ts +73 -0
- package/dist/src/hub-match.d.ts.map +1 -0
- package/dist/src/hub-match.js +120 -0
- package/dist/src/hub-match.js.map +1 -0
- package/dist/src/hub-registration.d.ts +24 -0
- package/dist/src/hub-registration.d.ts.map +1 -0
- package/dist/src/hub-registration.js +242 -0
- package/dist/src/hub-registration.js.map +1 -0
- package/dist/src/internal/envelope.d.ts +33 -0
- package/dist/src/internal/envelope.d.ts.map +1 -0
- package/dist/src/internal/envelope.js +152 -0
- package/dist/src/internal/envelope.js.map +1 -0
- package/dist/src/internal/idempotency.d.ts +48 -0
- package/dist/src/internal/idempotency.d.ts.map +1 -0
- package/dist/src/internal/idempotency.js +82 -0
- package/dist/src/internal/idempotency.js.map +1 -0
- package/dist/src/internal/metrics.d.ts +38 -0
- package/dist/src/internal/metrics.d.ts.map +1 -0
- package/dist/src/internal/metrics.js +83 -0
- package/dist/src/internal/metrics.js.map +1 -0
- package/dist/src/internal/outbox.d.ts +49 -0
- package/dist/src/internal/outbox.d.ts.map +1 -0
- package/dist/src/internal/outbox.js +149 -0
- package/dist/src/internal/outbox.js.map +1 -0
- package/dist/src/internal/routing.d.ts +28 -0
- package/dist/src/internal/routing.d.ts.map +1 -0
- package/dist/src/internal/routing.js +57 -0
- package/dist/src/internal/routing.js.map +1 -0
- package/dist/src/internal/security.d.ts +53 -0
- package/dist/src/internal/security.d.ts.map +1 -0
- package/dist/src/internal/security.js +122 -0
- package/dist/src/internal/security.js.map +1 -0
- package/dist/src/internal/transport.d.ts +49 -0
- package/dist/src/internal/transport.d.ts.map +1 -0
- package/dist/src/internal/transport.js +207 -0
- package/dist/src/internal/transport.js.map +1 -0
- package/dist/src/internal/types-internal.d.ts +95 -0
- package/dist/src/internal/types-internal.d.ts.map +1 -0
- package/dist/src/internal/types-internal.js +9 -0
- package/dist/src/internal/types-internal.js.map +1 -0
- package/dist/src/peer-health.d.ts +47 -0
- package/dist/src/peer-health.d.ts.map +1 -0
- package/dist/src/peer-health.js +169 -0
- package/dist/src/peer-health.js.map +1 -0
- package/dist/src/peer-retry.d.ts +16 -0
- package/dist/src/peer-retry.d.ts.map +1 -0
- package/dist/src/peer-retry.js +75 -0
- package/dist/src/peer-retry.js.map +1 -0
- package/dist/src/queueing-executor.d.ts +23 -0
- package/dist/src/queueing-executor.d.ts.map +1 -0
- package/dist/src/queueing-executor.js +179 -0
- package/dist/src/queueing-executor.js.map +1 -0
- package/dist/src/routing-rules.d.ts +53 -0
- package/dist/src/routing-rules.d.ts.map +1 -0
- package/dist/src/routing-rules.js +130 -0
- package/dist/src/routing-rules.js.map +1 -0
- package/dist/src/task-cleanup.d.ts +21 -0
- package/dist/src/task-cleanup.d.ts.map +1 -0
- package/dist/src/task-cleanup.js +77 -0
- package/dist/src/task-cleanup.js.map +1 -0
- package/dist/src/task-store.d.ts +16 -0
- package/dist/src/task-store.d.ts.map +1 -0
- package/dist/src/task-store.js +80 -0
- package/dist/src/task-store.js.map +1 -0
- package/dist/src/telemetry.d.ts +88 -0
- package/dist/src/telemetry.d.ts.map +1 -0
- package/dist/src/telemetry.js +235 -0
- package/dist/src/telemetry.js.map +1 -0
- package/dist/src/transport-fallback.d.ts +29 -0
- package/dist/src/transport-fallback.d.ts.map +1 -0
- package/dist/src/transport-fallback.js +81 -0
- package/dist/src/transport-fallback.js.map +1 -0
- package/dist/src/types.d.ts +160 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +7 -0
- package/dist/src/types.js.map +1 -0
- package/openclaw.plugin.json +272 -0
- package/package.json +56 -0
- package/skill/SKILL.md +230 -0
- package/skill/references/tools-md-template.md +57 -0
- package/skill/scripts/a2a-send.mjs +357 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { A2AMetricsCollector } from "./internal/metrics.js";
|
|
2
|
+
export class GatewayTelemetry {
|
|
3
|
+
collector = new A2AMetricsCollector();
|
|
4
|
+
logger;
|
|
5
|
+
structuredLogs;
|
|
6
|
+
http = {
|
|
7
|
+
requests_total: 0,
|
|
8
|
+
jsonrpc_requests: 0,
|
|
9
|
+
rest_requests: 0,
|
|
10
|
+
metrics_requests: 0,
|
|
11
|
+
outbound_requests: 0,
|
|
12
|
+
security_rejections: 0,
|
|
13
|
+
};
|
|
14
|
+
tasks = {
|
|
15
|
+
queued: 0,
|
|
16
|
+
started: 0,
|
|
17
|
+
completed: 0,
|
|
18
|
+
failed: 0,
|
|
19
|
+
canceled: 0,
|
|
20
|
+
rejected: 0,
|
|
21
|
+
timed_out: 0,
|
|
22
|
+
queue_rejections: 0,
|
|
23
|
+
active: 0,
|
|
24
|
+
queue_depth: 0,
|
|
25
|
+
max_active_observed: 0,
|
|
26
|
+
max_queue_depth_observed: 0,
|
|
27
|
+
total_duration_ms: 0,
|
|
28
|
+
finished: 0,
|
|
29
|
+
expired: 0,
|
|
30
|
+
};
|
|
31
|
+
peerRetries = {};
|
|
32
|
+
peerStateProvider = null;
|
|
33
|
+
taskAuditCallback = null;
|
|
34
|
+
constructor(logger, options = {}) {
|
|
35
|
+
this.logger = logger;
|
|
36
|
+
this.structuredLogs = options.structuredLogs !== false;
|
|
37
|
+
}
|
|
38
|
+
/** Register a callback to retrieve peer health states for the metrics snapshot. */
|
|
39
|
+
setPeerStateProvider(provider) {
|
|
40
|
+
this.peerStateProvider = provider;
|
|
41
|
+
}
|
|
42
|
+
/** Register a callback for audit logging on task completion. */
|
|
43
|
+
setTaskAuditCallback(callback) {
|
|
44
|
+
this.taskAuditCallback = callback;
|
|
45
|
+
}
|
|
46
|
+
recordInboundHttp(route, statusCode, durationMs) {
|
|
47
|
+
this.collector.recordReceive();
|
|
48
|
+
this.http.requests_total += 1;
|
|
49
|
+
this.http.last_request_at = new Date().toISOString();
|
|
50
|
+
if (route === "jsonrpc") {
|
|
51
|
+
this.http.jsonrpc_requests += 1;
|
|
52
|
+
}
|
|
53
|
+
else if (route === "rest") {
|
|
54
|
+
this.http.rest_requests += 1;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
this.http.metrics_requests += 1;
|
|
58
|
+
}
|
|
59
|
+
this.log("info", "http.request", {
|
|
60
|
+
route,
|
|
61
|
+
status_code: statusCode,
|
|
62
|
+
duration_ms: durationMs,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
recordOutboundRequest(peer, ok, statusCode, durationMs) {
|
|
66
|
+
this.http.outbound_requests += 1;
|
|
67
|
+
if (ok) {
|
|
68
|
+
this.collector.recordSend();
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.collector.recordError();
|
|
72
|
+
}
|
|
73
|
+
this.log(ok ? "info" : "warn", "peer.request", {
|
|
74
|
+
peer,
|
|
75
|
+
ok,
|
|
76
|
+
status_code: statusCode,
|
|
77
|
+
duration_ms: durationMs,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
recordPeerHealthCheck(peerName, healthy) {
|
|
81
|
+
this.log(healthy ? "info" : "warn", "peer.health", {
|
|
82
|
+
peer: peerName,
|
|
83
|
+
healthy,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
recordPeerCircuitChange(peerName, newState) {
|
|
87
|
+
this.log(newState === "closed" ? "info" : "warn", "peer.circuit", {
|
|
88
|
+
peer: peerName,
|
|
89
|
+
state: newState,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
recordPeerRetry(peerName, attempt) {
|
|
93
|
+
this.peerRetries[peerName] = (this.peerRetries[peerName] || 0) + 1;
|
|
94
|
+
this.log("warn", "peer.retry", {
|
|
95
|
+
peer: peerName,
|
|
96
|
+
attempt,
|
|
97
|
+
total_retries: this.peerRetries[peerName],
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
getPeerRetries() {
|
|
101
|
+
return { ...this.peerRetries };
|
|
102
|
+
}
|
|
103
|
+
recordSecurityRejection(surface, reason) {
|
|
104
|
+
this.collector.recordSecurityRejection();
|
|
105
|
+
this.http.security_rejections += 1;
|
|
106
|
+
this.log("warn", "security.rejection", {
|
|
107
|
+
surface,
|
|
108
|
+
reason,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
recordTaskQueued(taskId, contextId, position, queueDepth) {
|
|
112
|
+
this.tasks.queued += 1;
|
|
113
|
+
this.setQueueState(this.tasks.active, queueDepth);
|
|
114
|
+
this.log("info", "task.queued", {
|
|
115
|
+
task_id: taskId,
|
|
116
|
+
context_id: contextId,
|
|
117
|
+
queue_position: position,
|
|
118
|
+
queue_depth: queueDepth,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
recordTaskStart(taskId, contextId, agentId, activeCount, queueDepth) {
|
|
122
|
+
this.tasks.started += 1;
|
|
123
|
+
this.tasks.last_started_at = new Date().toISOString();
|
|
124
|
+
this.setQueueState(activeCount, queueDepth);
|
|
125
|
+
this.log("info", "task.started", {
|
|
126
|
+
task_id: taskId,
|
|
127
|
+
context_id: contextId,
|
|
128
|
+
agent_id: agentId,
|
|
129
|
+
active_tasks: activeCount,
|
|
130
|
+
queue_depth: queueDepth,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
recordTaskFinish(taskId, contextId, state, durationMs, activeCount, queueDepth, errorMessage) {
|
|
134
|
+
this.tasks.finished += 1;
|
|
135
|
+
this.tasks.total_duration_ms += durationMs;
|
|
136
|
+
this.tasks.last_finished_at = new Date().toISOString();
|
|
137
|
+
this.setQueueState(activeCount, queueDepth);
|
|
138
|
+
if (state === "completed") {
|
|
139
|
+
this.tasks.completed += 1;
|
|
140
|
+
}
|
|
141
|
+
else if (state === "failed") {
|
|
142
|
+
this.tasks.failed += 1;
|
|
143
|
+
this.collector.recordError();
|
|
144
|
+
if (this.isTimeoutError(errorMessage)) {
|
|
145
|
+
this.tasks.timed_out += 1;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else if (state === "canceled") {
|
|
149
|
+
this.tasks.canceled += 1;
|
|
150
|
+
}
|
|
151
|
+
else if (state === "rejected") {
|
|
152
|
+
this.tasks.rejected += 1;
|
|
153
|
+
}
|
|
154
|
+
this.log(state === "completed" ? "info" : "warn", "task.finished", {
|
|
155
|
+
task_id: taskId,
|
|
156
|
+
context_id: contextId,
|
|
157
|
+
state,
|
|
158
|
+
duration_ms: durationMs,
|
|
159
|
+
active_tasks: activeCount,
|
|
160
|
+
queue_depth: queueDepth,
|
|
161
|
+
error: errorMessage,
|
|
162
|
+
});
|
|
163
|
+
this.taskAuditCallback?.(taskId, contextId, state, durationMs);
|
|
164
|
+
}
|
|
165
|
+
recordQueueRejected(taskId, contextId, queueDepth) {
|
|
166
|
+
this.tasks.queue_rejections += 1;
|
|
167
|
+
this.tasks.rejected += 1;
|
|
168
|
+
this.setQueueState(this.tasks.active, queueDepth);
|
|
169
|
+
this.log("warn", "task.queue_rejected", {
|
|
170
|
+
task_id: taskId,
|
|
171
|
+
context_id: contextId,
|
|
172
|
+
queue_depth: queueDepth,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
recordTaskExpired(taskId, state) {
|
|
176
|
+
this.tasks.expired += 1;
|
|
177
|
+
this.tasks.last_cleanup_at = new Date().toISOString();
|
|
178
|
+
this.log("info", "task.expired", {
|
|
179
|
+
task_id: taskId,
|
|
180
|
+
state,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
snapshot() {
|
|
184
|
+
const averageDuration = this.tasks.finished > 0
|
|
185
|
+
? Number((this.tasks.total_duration_ms / this.tasks.finished).toFixed(2))
|
|
186
|
+
: 0;
|
|
187
|
+
// Build peer metrics from health manager state + retry counters
|
|
188
|
+
const peers = {};
|
|
189
|
+
if (this.peerStateProvider) {
|
|
190
|
+
const states = this.peerStateProvider();
|
|
191
|
+
for (const [name, state] of states) {
|
|
192
|
+
peers[name] = {
|
|
193
|
+
health: state.health,
|
|
194
|
+
circuit: state.circuit,
|
|
195
|
+
consecutive_failures: state.consecutiveFailures,
|
|
196
|
+
total_retries: this.peerRetries[name] || 0,
|
|
197
|
+
last_check_at: state.lastCheckAt
|
|
198
|
+
? new Date(state.lastCheckAt).toISOString()
|
|
199
|
+
: undefined,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
protocol: this.collector.getMetrics(),
|
|
205
|
+
http: { ...this.http },
|
|
206
|
+
tasks: {
|
|
207
|
+
...this.tasks,
|
|
208
|
+
average_duration_ms: averageDuration,
|
|
209
|
+
},
|
|
210
|
+
peers,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
setQueueState(activeCount, queueDepth) {
|
|
214
|
+
this.tasks.active = activeCount;
|
|
215
|
+
this.tasks.queue_depth = queueDepth;
|
|
216
|
+
this.tasks.max_active_observed = Math.max(this.tasks.max_active_observed, activeCount);
|
|
217
|
+
this.tasks.max_queue_depth_observed = Math.max(this.tasks.max_queue_depth_observed, queueDepth);
|
|
218
|
+
}
|
|
219
|
+
isTimeoutError(errorMessage) {
|
|
220
|
+
return typeof errorMessage === "string" && /timed out/i.test(errorMessage);
|
|
221
|
+
}
|
|
222
|
+
log(level, event, details) {
|
|
223
|
+
if (!this.structuredLogs) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const payload = JSON.stringify({
|
|
227
|
+
ts: new Date().toISOString(),
|
|
228
|
+
component: "a2a-gateway",
|
|
229
|
+
event,
|
|
230
|
+
...details,
|
|
231
|
+
});
|
|
232
|
+
this.logger[level](payload);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport fallback helpers for A2A outbound sends.
|
|
3
|
+
*
|
|
4
|
+
* When a peer's Agent Card advertises multiple transports via
|
|
5
|
+
* `additionalInterfaces`, this module provides utilities to order
|
|
6
|
+
* them by priority and to decide whether a send error is retryable
|
|
7
|
+
* at the transport level (as opposed to auth / protocol errors that
|
|
8
|
+
* would fail identically on every transport).
|
|
9
|
+
*/
|
|
10
|
+
/** Canonical transport protocol names from the A2A v0.3.0 spec. */
|
|
11
|
+
export type TransportPriority = "JSONRPC" | "HTTP+JSON" | "GRPC";
|
|
12
|
+
export interface TransportEndpoint {
|
|
13
|
+
url: string;
|
|
14
|
+
transport: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Sort transport endpoints by priority (JSON-RPC > REST > gRPC).
|
|
18
|
+
* Unknown transports are appended at the end in their original order.
|
|
19
|
+
*/
|
|
20
|
+
export declare function orderTransports(interfaces: TransportEndpoint[]): TransportEndpoint[];
|
|
21
|
+
/**
|
|
22
|
+
* Returns `true` when the error indicates a transport-level problem that
|
|
23
|
+
* could succeed on a different transport (connection refused, timeout, 5xx).
|
|
24
|
+
*
|
|
25
|
+
* Auth errors (401/403) and A2A protocol errors are NOT retryable because
|
|
26
|
+
* they would fail identically on every transport.
|
|
27
|
+
*/
|
|
28
|
+
export declare function isRetryableTransportError(error: unknown): boolean;
|
|
29
|
+
//# sourceMappingURL=transport-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport-fallback.d.ts","sourceRoot":"","sources":["../../src/transport-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,mEAAmE;AACnE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;AAKjE,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAmBpF;AAMD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA2CjE"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport fallback helpers for A2A outbound sends.
|
|
3
|
+
*
|
|
4
|
+
* When a peer's Agent Card advertises multiple transports via
|
|
5
|
+
* `additionalInterfaces`, this module provides utilities to order
|
|
6
|
+
* them by priority and to decide whether a send error is retryable
|
|
7
|
+
* at the transport level (as opposed to auth / protocol errors that
|
|
8
|
+
* would fail identically on every transport).
|
|
9
|
+
*/
|
|
10
|
+
/** Fallback order: JSON-RPC first, REST second, gRPC last. */
|
|
11
|
+
const PRIORITY_ORDER = ["JSONRPC", "HTTP+JSON", "GRPC"];
|
|
12
|
+
/**
|
|
13
|
+
* Sort transport endpoints by priority (JSON-RPC > REST > gRPC).
|
|
14
|
+
* Unknown transports are appended at the end in their original order.
|
|
15
|
+
*/
|
|
16
|
+
export function orderTransports(interfaces) {
|
|
17
|
+
const known = [];
|
|
18
|
+
const unknown = [];
|
|
19
|
+
// Bucket by known vs unknown
|
|
20
|
+
for (const iface of interfaces) {
|
|
21
|
+
if (PRIORITY_ORDER.includes(iface.transport)) {
|
|
22
|
+
known.push(iface);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
unknown.push(iface);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Sort known by priority index
|
|
29
|
+
known.sort((a, b) => PRIORITY_ORDER.indexOf(a.transport) - PRIORITY_ORDER.indexOf(b.transport));
|
|
30
|
+
return [...known, ...unknown];
|
|
31
|
+
}
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Error classification
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
/**
|
|
36
|
+
* Returns `true` when the error indicates a transport-level problem that
|
|
37
|
+
* could succeed on a different transport (connection refused, timeout, 5xx).
|
|
38
|
+
*
|
|
39
|
+
* Auth errors (401/403) and A2A protocol errors are NOT retryable because
|
|
40
|
+
* they would fail identically on every transport.
|
|
41
|
+
*/
|
|
42
|
+
export function isRetryableTransportError(error) {
|
|
43
|
+
if (!error)
|
|
44
|
+
return false;
|
|
45
|
+
// Fetch / network errors thrown as Error objects
|
|
46
|
+
if (error instanceof Error) {
|
|
47
|
+
const msg = error.message.toLowerCase();
|
|
48
|
+
return (msg.includes("econnrefused") ||
|
|
49
|
+
msg.includes("econnreset") ||
|
|
50
|
+
msg.includes("etimedout") ||
|
|
51
|
+
msg.includes("epipe") ||
|
|
52
|
+
msg.includes("fetch failed") ||
|
|
53
|
+
msg.includes("network") ||
|
|
54
|
+
msg.includes("socket") ||
|
|
55
|
+
msg.includes("abort") ||
|
|
56
|
+
msg.includes("timeout") ||
|
|
57
|
+
msg.includes("timed out") ||
|
|
58
|
+
msg.includes("dns") ||
|
|
59
|
+
msg.includes("enotfound") ||
|
|
60
|
+
// gRPC transport errors
|
|
61
|
+
msg.includes("unavailable") ||
|
|
62
|
+
msg.includes("deadline exceeded"));
|
|
63
|
+
}
|
|
64
|
+
// HTTP response-like objects with a status code
|
|
65
|
+
if (error &&
|
|
66
|
+
typeof error === "object" &&
|
|
67
|
+
"statusCode" in error &&
|
|
68
|
+
typeof error.statusCode === "number") {
|
|
69
|
+
const code = error.statusCode;
|
|
70
|
+
// 5xx = server error → could be transport-specific → retry
|
|
71
|
+
// 429 = rate limit → transport-specific → retry
|
|
72
|
+
if (code >= 500 || code === 429)
|
|
73
|
+
return true;
|
|
74
|
+
// 401/403 = auth → would fail on all transports → no retry
|
|
75
|
+
// Other 4xx = client error → no retry
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
// Unknown shape → not retryable (be conservative)
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=transport-fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport-fallback.js","sourceRoot":"","sources":["../../src/transport-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,8DAA8D;AAC9D,MAAM,cAAc,GAAsB,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAO3E;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,UAA+B;IAC7D,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,6BAA6B;IAC7B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,KAAK,CAAC,IAAI,CACR,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CACpF,CAAC;IAEF,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,iDAAiD;IACjD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACxC,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC5B,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC1B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;YACzB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;YACrB,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC5B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;YACvB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACtB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;YACrB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;YACvB,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;YACzB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;YACnB,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;YACzB,wBAAwB;YACxB,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC3B,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAClC,CAAC;IACJ,CAAC;IAED,gDAAgD;IAChD,IACE,KAAK;QACL,OAAO,KAAK,KAAK,QAAQ;QACzB,YAAY,IAAI,KAAK;QACrB,OAAQ,KAAa,CAAC,UAAU,KAAK,QAAQ,EAC7C,CAAC;QACD,MAAM,IAAI,GAAI,KAAa,CAAC,UAAoB,CAAC;QACjD,2DAA2D;QAC3D,gDAAgD;QAChD,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAC7C,2DAA2D;QAC3D,sCAAsC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kDAAkD;IAClD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A Gateway Plugin — Standard types
|
|
3
|
+
*
|
|
4
|
+
* These types support the A2A v0.3.0 protocol integration via @a2a-js/sdk.
|
|
5
|
+
*/
|
|
6
|
+
export type { OpenClawPluginApi, PluginLogger, OpenClawConfig } from "openclaw/plugin-sdk";
|
|
7
|
+
export type InboundAuth = "none" | "bearer";
|
|
8
|
+
export type PeerAuthType = "bearer" | "apiKey";
|
|
9
|
+
export interface PeerAuthConfig {
|
|
10
|
+
type: PeerAuthType;
|
|
11
|
+
token: string;
|
|
12
|
+
}
|
|
13
|
+
export interface PeerConfig {
|
|
14
|
+
name: string;
|
|
15
|
+
agentCardUrl: string;
|
|
16
|
+
auth?: PeerAuthConfig;
|
|
17
|
+
}
|
|
18
|
+
export interface AgentSkillConfig {
|
|
19
|
+
id?: string;
|
|
20
|
+
name: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface AgentCardConfig {
|
|
24
|
+
name: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
url?: string;
|
|
27
|
+
skills: Array<AgentSkillConfig | string>;
|
|
28
|
+
}
|
|
29
|
+
export interface FileSecurityConfig {
|
|
30
|
+
/** Allowed MIME type patterns (e.g. "image/*", "application/pdf"). */
|
|
31
|
+
allowedMimeTypes: string[];
|
|
32
|
+
/** Max file size in bytes for URI-based files (default 50MB). */
|
|
33
|
+
maxFileSizeBytes: number;
|
|
34
|
+
/** Max file size in bytes for inline base64 files (default 10MB). */
|
|
35
|
+
maxInlineFileSizeBytes: number;
|
|
36
|
+
/** URI hostname allowlist patterns (e.g. "*.example.com"). Empty = allow all public hosts. */
|
|
37
|
+
fileUriAllowlist: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface SecurityConfig extends FileSecurityConfig {
|
|
40
|
+
inboundAuth: InboundAuth;
|
|
41
|
+
token?: string;
|
|
42
|
+
tokens?: string[];
|
|
43
|
+
/** Runtime-merged set of all valid tokens (from `token` + `tokens`, deduplicated). */
|
|
44
|
+
validTokens: Set<string>;
|
|
45
|
+
}
|
|
46
|
+
export interface GatewayConfig {
|
|
47
|
+
agentCard: AgentCardConfig;
|
|
48
|
+
server: {
|
|
49
|
+
host: string;
|
|
50
|
+
port: number;
|
|
51
|
+
};
|
|
52
|
+
storage: {
|
|
53
|
+
tasksDir: string;
|
|
54
|
+
taskTtlHours: number;
|
|
55
|
+
cleanupIntervalMinutes: number;
|
|
56
|
+
};
|
|
57
|
+
peers: PeerConfig[];
|
|
58
|
+
security: SecurityConfig;
|
|
59
|
+
routing: {
|
|
60
|
+
defaultAgentId: string;
|
|
61
|
+
rules?: RoutingRule[];
|
|
62
|
+
};
|
|
63
|
+
limits: {
|
|
64
|
+
maxConcurrentTasks: number;
|
|
65
|
+
maxQueuedTasks: number;
|
|
66
|
+
};
|
|
67
|
+
observability: {
|
|
68
|
+
structuredLogs: boolean;
|
|
69
|
+
exposeMetricsEndpoint: boolean;
|
|
70
|
+
metricsPath: string;
|
|
71
|
+
metricsAuth: "none" | "bearer";
|
|
72
|
+
auditLogPath: string;
|
|
73
|
+
};
|
|
74
|
+
timeouts?: {
|
|
75
|
+
/**
|
|
76
|
+
* Max time to wait for the underlying OpenClaw agent run to finish (Gateway RPC `agent`).
|
|
77
|
+
* Long-running prompts should use async task mode (blocking=false) + tasks/get polling.
|
|
78
|
+
*/
|
|
79
|
+
agentResponseTimeoutMs?: number;
|
|
80
|
+
};
|
|
81
|
+
resilience: PeerResilienceConfig;
|
|
82
|
+
hub?: HubConfig;
|
|
83
|
+
registration?: RegistrationConfig;
|
|
84
|
+
}
|
|
85
|
+
export interface HubConfig {
|
|
86
|
+
url: string;
|
|
87
|
+
enabled: boolean;
|
|
88
|
+
registrationEnabled: boolean;
|
|
89
|
+
}
|
|
90
|
+
export interface RegistrationConfig {
|
|
91
|
+
username?: string;
|
|
92
|
+
email?: string;
|
|
93
|
+
skills?: string[];
|
|
94
|
+
}
|
|
95
|
+
export interface HubRegistrationData {
|
|
96
|
+
version: number;
|
|
97
|
+
hubUrl: string;
|
|
98
|
+
agentId: number;
|
|
99
|
+
address: string;
|
|
100
|
+
token: string;
|
|
101
|
+
registeredAt: string;
|
|
102
|
+
name: string;
|
|
103
|
+
description: string;
|
|
104
|
+
skills: string[];
|
|
105
|
+
}
|
|
106
|
+
export interface HealthCheckConfig {
|
|
107
|
+
enabled: boolean;
|
|
108
|
+
intervalMs: number;
|
|
109
|
+
timeoutMs: number;
|
|
110
|
+
}
|
|
111
|
+
export interface RetryConfig {
|
|
112
|
+
maxRetries: number;
|
|
113
|
+
baseDelayMs: number;
|
|
114
|
+
maxDelayMs: number;
|
|
115
|
+
}
|
|
116
|
+
export interface CircuitBreakerConfig {
|
|
117
|
+
failureThreshold: number;
|
|
118
|
+
resetTimeoutMs: number;
|
|
119
|
+
}
|
|
120
|
+
export interface PeerResilienceConfig {
|
|
121
|
+
healthCheck: HealthCheckConfig;
|
|
122
|
+
retry: RetryConfig;
|
|
123
|
+
circuitBreaker: CircuitBreakerConfig;
|
|
124
|
+
}
|
|
125
|
+
export type CircuitState = "closed" | "open" | "half-open";
|
|
126
|
+
export type HealthStatus = "healthy" | "unhealthy" | "unknown";
|
|
127
|
+
export interface PeerState {
|
|
128
|
+
health: HealthStatus;
|
|
129
|
+
circuit: CircuitState;
|
|
130
|
+
consecutiveFailures: number;
|
|
131
|
+
lastFailureAt: number | null;
|
|
132
|
+
lastCheckAt: number | null;
|
|
133
|
+
}
|
|
134
|
+
export interface OutboundSendResult {
|
|
135
|
+
ok: boolean;
|
|
136
|
+
statusCode: number;
|
|
137
|
+
response: unknown;
|
|
138
|
+
}
|
|
139
|
+
export interface RoutingRule {
|
|
140
|
+
name: string;
|
|
141
|
+
match: {
|
|
142
|
+
/** Regex pattern to match against message text (case-insensitive). */
|
|
143
|
+
pattern?: string;
|
|
144
|
+
/** Match if message contains any of these tags (OR logic). */
|
|
145
|
+
tags?: string[];
|
|
146
|
+
/** Match if target peer has any of these skills. */
|
|
147
|
+
skills?: string[];
|
|
148
|
+
};
|
|
149
|
+
target: {
|
|
150
|
+
peer: string;
|
|
151
|
+
agentId?: string;
|
|
152
|
+
};
|
|
153
|
+
/** Higher = checked first (default: 0). */
|
|
154
|
+
priority?: number;
|
|
155
|
+
}
|
|
156
|
+
export interface RoutingMatch {
|
|
157
|
+
peer: string;
|
|
158
|
+
agentId?: string;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|