@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.
Files changed (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +82 -0
  3. package/dist/index.d.ts +17 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +720 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/src/agent-card.d.ts +4 -0
  8. package/dist/src/agent-card.d.ts.map +1 -0
  9. package/dist/src/agent-card.js +61 -0
  10. package/dist/src/agent-card.js.map +1 -0
  11. package/dist/src/audit.d.ts +36 -0
  12. package/dist/src/audit.d.ts.map +1 -0
  13. package/dist/src/audit.js +88 -0
  14. package/dist/src/audit.js.map +1 -0
  15. package/dist/src/client.d.ts +53 -0
  16. package/dist/src/client.d.ts.map +1 -0
  17. package/dist/src/client.js +322 -0
  18. package/dist/src/client.js.map +1 -0
  19. package/dist/src/executor.d.ts +34 -0
  20. package/dist/src/executor.d.ts.map +1 -0
  21. package/dist/src/executor.js +994 -0
  22. package/dist/src/executor.js.map +1 -0
  23. package/dist/src/file-security.d.ts +63 -0
  24. package/dist/src/file-security.d.ts.map +1 -0
  25. package/dist/src/file-security.js +350 -0
  26. package/dist/src/file-security.js.map +1 -0
  27. package/dist/src/hub-match.d.ts +73 -0
  28. package/dist/src/hub-match.d.ts.map +1 -0
  29. package/dist/src/hub-match.js +120 -0
  30. package/dist/src/hub-match.js.map +1 -0
  31. package/dist/src/hub-registration.d.ts +24 -0
  32. package/dist/src/hub-registration.d.ts.map +1 -0
  33. package/dist/src/hub-registration.js +242 -0
  34. package/dist/src/hub-registration.js.map +1 -0
  35. package/dist/src/internal/envelope.d.ts +33 -0
  36. package/dist/src/internal/envelope.d.ts.map +1 -0
  37. package/dist/src/internal/envelope.js +152 -0
  38. package/dist/src/internal/envelope.js.map +1 -0
  39. package/dist/src/internal/idempotency.d.ts +48 -0
  40. package/dist/src/internal/idempotency.d.ts.map +1 -0
  41. package/dist/src/internal/idempotency.js +82 -0
  42. package/dist/src/internal/idempotency.js.map +1 -0
  43. package/dist/src/internal/metrics.d.ts +38 -0
  44. package/dist/src/internal/metrics.d.ts.map +1 -0
  45. package/dist/src/internal/metrics.js +83 -0
  46. package/dist/src/internal/metrics.js.map +1 -0
  47. package/dist/src/internal/outbox.d.ts +49 -0
  48. package/dist/src/internal/outbox.d.ts.map +1 -0
  49. package/dist/src/internal/outbox.js +149 -0
  50. package/dist/src/internal/outbox.js.map +1 -0
  51. package/dist/src/internal/routing.d.ts +28 -0
  52. package/dist/src/internal/routing.d.ts.map +1 -0
  53. package/dist/src/internal/routing.js +57 -0
  54. package/dist/src/internal/routing.js.map +1 -0
  55. package/dist/src/internal/security.d.ts +53 -0
  56. package/dist/src/internal/security.d.ts.map +1 -0
  57. package/dist/src/internal/security.js +122 -0
  58. package/dist/src/internal/security.js.map +1 -0
  59. package/dist/src/internal/transport.d.ts +49 -0
  60. package/dist/src/internal/transport.d.ts.map +1 -0
  61. package/dist/src/internal/transport.js +207 -0
  62. package/dist/src/internal/transport.js.map +1 -0
  63. package/dist/src/internal/types-internal.d.ts +95 -0
  64. package/dist/src/internal/types-internal.d.ts.map +1 -0
  65. package/dist/src/internal/types-internal.js +9 -0
  66. package/dist/src/internal/types-internal.js.map +1 -0
  67. package/dist/src/peer-health.d.ts +47 -0
  68. package/dist/src/peer-health.d.ts.map +1 -0
  69. package/dist/src/peer-health.js +169 -0
  70. package/dist/src/peer-health.js.map +1 -0
  71. package/dist/src/peer-retry.d.ts +16 -0
  72. package/dist/src/peer-retry.d.ts.map +1 -0
  73. package/dist/src/peer-retry.js +75 -0
  74. package/dist/src/peer-retry.js.map +1 -0
  75. package/dist/src/queueing-executor.d.ts +23 -0
  76. package/dist/src/queueing-executor.d.ts.map +1 -0
  77. package/dist/src/queueing-executor.js +179 -0
  78. package/dist/src/queueing-executor.js.map +1 -0
  79. package/dist/src/routing-rules.d.ts +53 -0
  80. package/dist/src/routing-rules.d.ts.map +1 -0
  81. package/dist/src/routing-rules.js +130 -0
  82. package/dist/src/routing-rules.js.map +1 -0
  83. package/dist/src/task-cleanup.d.ts +21 -0
  84. package/dist/src/task-cleanup.d.ts.map +1 -0
  85. package/dist/src/task-cleanup.js +77 -0
  86. package/dist/src/task-cleanup.js.map +1 -0
  87. package/dist/src/task-store.d.ts +16 -0
  88. package/dist/src/task-store.d.ts.map +1 -0
  89. package/dist/src/task-store.js +80 -0
  90. package/dist/src/task-store.js.map +1 -0
  91. package/dist/src/telemetry.d.ts +88 -0
  92. package/dist/src/telemetry.d.ts.map +1 -0
  93. package/dist/src/telemetry.js +235 -0
  94. package/dist/src/telemetry.js.map +1 -0
  95. package/dist/src/transport-fallback.d.ts +29 -0
  96. package/dist/src/transport-fallback.d.ts.map +1 -0
  97. package/dist/src/transport-fallback.js +81 -0
  98. package/dist/src/transport-fallback.js.map +1 -0
  99. package/dist/src/types.d.ts +160 -0
  100. package/dist/src/types.d.ts.map +1 -0
  101. package/dist/src/types.js +7 -0
  102. package/dist/src/types.js.map +1 -0
  103. package/openclaw.plugin.json +272 -0
  104. package/package.json +56 -0
  105. package/skill/SKILL.md +230 -0
  106. package/skill/references/tools-md-template.md +57 -0
  107. package/skill/scripts/a2a-send.mjs +357 -0
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Rule-based routing — choose peer + agentId based on message content.
3
+ *
4
+ * Rules are evaluated at send-time in priority order (higher priority first).
5
+ * The first matching rule wins.
6
+ */
7
+ // ---------------------------------------------------------------------------
8
+ // Parsing
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * Parse and validate routing rules from raw config.
12
+ *
13
+ * Invalid entries (missing name, target.peer, or at least one match criterion)
14
+ * are silently dropped.
15
+ */
16
+ export function parseRoutingRules(raw) {
17
+ if (!Array.isArray(raw))
18
+ return [];
19
+ const rules = [];
20
+ for (const entry of raw) {
21
+ if (!entry || typeof entry !== "object")
22
+ continue;
23
+ const obj = entry;
24
+ const name = typeof obj.name === "string" ? obj.name.trim() : "";
25
+ if (!name)
26
+ continue;
27
+ const matchRaw = obj.match && typeof obj.match === "object" ? obj.match : null;
28
+ if (!matchRaw)
29
+ continue;
30
+ const pattern = typeof matchRaw.pattern === "string" ? matchRaw.pattern : undefined;
31
+ const tags = Array.isArray(matchRaw.tags)
32
+ ? matchRaw.tags.filter((t) => typeof t === "string" && t.length > 0)
33
+ : undefined;
34
+ const skills = Array.isArray(matchRaw.skills)
35
+ ? matchRaw.skills.filter((s) => typeof s === "string" && s.length > 0)
36
+ : undefined;
37
+ // At least one match criterion required
38
+ const hasPattern = pattern !== undefined && pattern.length > 0;
39
+ const hasTags = tags !== undefined && tags.length > 0;
40
+ const hasSkills = skills !== undefined && skills.length > 0;
41
+ if (!hasPattern && !hasTags && !hasSkills)
42
+ continue;
43
+ const targetRaw = obj.target && typeof obj.target === "object" ? obj.target : null;
44
+ if (!targetRaw)
45
+ continue;
46
+ const peer = typeof targetRaw.peer === "string" ? targetRaw.peer.trim() : "";
47
+ if (!peer)
48
+ continue;
49
+ const agentId = typeof targetRaw.agentId === "string" ? targetRaw.agentId.trim() || undefined : undefined;
50
+ const priority = typeof obj.priority === "number" && Number.isFinite(obj.priority) ? obj.priority : 0;
51
+ rules.push({
52
+ name,
53
+ match: {
54
+ ...(hasPattern ? { pattern } : {}),
55
+ ...(hasTags ? { tags } : {}),
56
+ ...(hasSkills ? { skills } : {}),
57
+ },
58
+ target: { peer, ...(agentId ? { agentId } : {}) },
59
+ priority,
60
+ });
61
+ }
62
+ // Sort by priority descending (higher first), stable order for same priority
63
+ rules.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
64
+ return rules;
65
+ }
66
+ // ---------------------------------------------------------------------------
67
+ // Matching
68
+ // ---------------------------------------------------------------------------
69
+ /**
70
+ * Evaluate rules in priority order against a message.
71
+ *
72
+ * Match criteria within a single rule are AND-combined:
73
+ * - pattern: regex test against message text
74
+ * - tags: any overlap between message tags and rule tags
75
+ * - skills: target peer advertises at least one required skill
76
+ *
77
+ * Returns the first match or null.
78
+ *
79
+ * The `peerSkills` map is populated from Agent Card discovery during
80
+ * periodic health checks. Skills are cached per peer and refreshed
81
+ * on each successful health check probe.
82
+ */
83
+ export function matchRule(rules, message, peerSkills) {
84
+ for (const rule of rules) {
85
+ if (!matchesRule(rule, message, peerSkills))
86
+ continue;
87
+ return {
88
+ peer: rule.target.peer,
89
+ ...(rule.target.agentId ? { agentId: rule.target.agentId } : {}),
90
+ };
91
+ }
92
+ return null;
93
+ }
94
+ /**
95
+ * Test whether a single rule matches the given message.
96
+ * All specified criteria must match (AND logic across criteria).
97
+ */
98
+ function matchesRule(rule, message, peerSkills) {
99
+ // Pattern matching (case-insensitive, with length limit to mitigate ReDoS)
100
+ if (rule.match.pattern) {
101
+ if (rule.match.pattern.length > 500)
102
+ return false; // reject overly complex patterns
103
+ try {
104
+ const re = new RegExp(rule.match.pattern, "i");
105
+ // Test against a truncated message to limit backtracking surface
106
+ if (!re.test(message.text.slice(0, 10_000)))
107
+ return false;
108
+ }
109
+ catch {
110
+ // Invalid regex → rule cannot match
111
+ return false;
112
+ }
113
+ }
114
+ // Tag matching (OR: any tag in common)
115
+ if (rule.match.tags && rule.match.tags.length > 0) {
116
+ const messageTags = message.tags ?? [];
117
+ const hit = rule.match.tags.some((t) => messageTags.includes(t));
118
+ if (!hit)
119
+ return false;
120
+ }
121
+ // Skill matching (OR: peer has at least one required skill)
122
+ if (rule.match.skills && rule.match.skills.length > 0) {
123
+ const skills = peerSkills?.get(rule.target.peer) ?? [];
124
+ const hit = rule.match.skills.some((s) => skills.includes(s));
125
+ if (!hit)
126
+ return false;
127
+ }
128
+ return true;
129
+ }
130
+ //# sourceMappingURL=routing-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-rules.js","sourceRoot":"","sources":["../../src/routing-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { FileTaskStore } from "./task-store.js";
2
+ import type { GatewayTelemetry } from "./telemetry.js";
3
+ type LoggerLike = {
4
+ info: (msg: string) => void;
5
+ warn: (msg: string) => void;
6
+ };
7
+ export interface CleanupResult {
8
+ expired: number;
9
+ skipped: number;
10
+ errors: number;
11
+ }
12
+ /**
13
+ * Scan the task store and delete tasks that:
14
+ * 1. Are in a terminal state (completed/failed/canceled/rejected)
15
+ * 2. Have a `status.timestamp` older than `ttlMs`
16
+ *
17
+ * Active tasks and tasks without a timestamp are always skipped.
18
+ */
19
+ export declare function runTaskCleanup(store: FileTaskStore, ttlMs: number, telemetry: GatewayTelemetry, logger: LoggerLike): Promise<CleanupResult>;
20
+ export {};
21
+ //# sourceMappingURL=task-cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-cleanup.d.ts","sourceRoot":"","sources":["../../src/task-cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,KAAK,UAAU,GAAG;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,CAAC;AAM/E,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,aAAa,CAAC,CA2ExB"}
@@ -0,0 +1,77 @@
1
+ /** Terminal states that are safe to expire. */
2
+ const TERMINAL_STATES = new Set(["completed", "failed", "canceled", "rejected"]);
3
+ const ACTIVE_CLEANUPS = new WeakSet();
4
+ /**
5
+ * Scan the task store and delete tasks that:
6
+ * 1. Are in a terminal state (completed/failed/canceled/rejected)
7
+ * 2. Have a `status.timestamp` older than `ttlMs`
8
+ *
9
+ * Active tasks and tasks without a timestamp are always skipped.
10
+ */
11
+ export async function runTaskCleanup(store, ttlMs, telemetry, logger) {
12
+ if (ACTIVE_CLEANUPS.has(store)) {
13
+ return { expired: 0, skipped: 0, errors: 0 };
14
+ }
15
+ ACTIVE_CLEANUPS.add(store);
16
+ const result = { expired: 0, skipped: 0, errors: 0 };
17
+ const now = Date.now();
18
+ try {
19
+ let taskIds;
20
+ try {
21
+ taskIds = await store.listAll();
22
+ }
23
+ catch (err) {
24
+ const msg = err instanceof Error ? err.message : String(err);
25
+ logger.warn(`a2a-gateway: task cleanup failed to list tasks: ${msg}`);
26
+ return result;
27
+ }
28
+ if (taskIds.length === 0) {
29
+ return result;
30
+ }
31
+ for (const taskId of taskIds) {
32
+ try {
33
+ const task = await store.load(taskId);
34
+ if (!task) {
35
+ // File disappeared between listAll and load — not an error
36
+ continue;
37
+ }
38
+ const { state } = task.status;
39
+ if (!TERMINAL_STATES.has(state)) {
40
+ result.skipped += 1;
41
+ continue;
42
+ }
43
+ const timestamp = task.status.timestamp;
44
+ if (!timestamp) {
45
+ // No timestamp -> can't determine age -> skip
46
+ result.skipped += 1;
47
+ continue;
48
+ }
49
+ const age = now - new Date(timestamp).getTime();
50
+ if (isNaN(age) || age < ttlMs) {
51
+ result.skipped += 1;
52
+ continue;
53
+ }
54
+ const deleted = await store.delete(taskId);
55
+ if (!deleted) {
56
+ result.skipped += 1;
57
+ continue;
58
+ }
59
+ telemetry.recordTaskExpired(taskId, state);
60
+ result.expired += 1;
61
+ }
62
+ catch (err) {
63
+ const msg = err instanceof Error ? err.message : String(err);
64
+ logger.warn(`a2a-gateway: task cleanup error for ${taskId}: ${msg}`);
65
+ result.errors += 1;
66
+ }
67
+ }
68
+ if (result.expired > 0) {
69
+ logger.info(`a2a-gateway: task cleanup completed - expired=${result.expired} skipped=${result.skipped} errors=${result.errors}`);
70
+ }
71
+ return result;
72
+ }
73
+ finally {
74
+ ACTIVE_CLEANUPS.delete(store);
75
+ }
76
+ }
77
+ //# sourceMappingURL=task-cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-cleanup.js","sourceRoot":"","sources":["../../src/task-cleanup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Task } from "@a2a-js/sdk";
2
+ import type { ServerCallContext, TaskStore } from "@a2a-js/sdk/server";
3
+ export declare class FileTaskStore implements TaskStore {
4
+ private readonly tasksDir;
5
+ private dirReady;
6
+ constructor(tasksDir: string);
7
+ load(taskId: string, _context?: ServerCallContext): Promise<Task | undefined>;
8
+ save(task: Task, _context?: ServerCallContext): Promise<void>;
9
+ /** List all stored task IDs. */
10
+ listAll(): Promise<string[]>;
11
+ /** Delete a task file and report whether anything was removed. */
12
+ delete(taskId: string): Promise<boolean>;
13
+ private taskPath;
14
+ private ensureDir;
15
+ }
16
+ //# sourceMappingURL=task-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-store.d.ts","sourceRoot":"","sources":["../../src/task-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAUvE,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAA8B;gBAElC,QAAQ,EAAE,MAAM;IAItB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAa7E,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnE,gCAAgC;IAC1B,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAelC,kEAAkE;IAC5D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa9C,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;CAYlB"}
@@ -0,0 +1,80 @@
1
+ import { mkdir, readdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ function cloneTask(task) {
4
+ return JSON.parse(JSON.stringify(task));
5
+ }
6
+ function taskFileName(taskId) {
7
+ return `${encodeURIComponent(taskId)}.json`;
8
+ }
9
+ export class FileTaskStore {
10
+ tasksDir;
11
+ dirReady = null;
12
+ constructor(tasksDir) {
13
+ this.tasksDir = path.resolve(tasksDir);
14
+ }
15
+ async load(taskId, _context) {
16
+ try {
17
+ const payload = await readFile(this.taskPath(taskId), "utf8");
18
+ return JSON.parse(payload);
19
+ }
20
+ catch (error) {
21
+ const code = error?.code;
22
+ if (code === "ENOENT") {
23
+ return undefined;
24
+ }
25
+ throw error;
26
+ }
27
+ }
28
+ async save(task, _context) {
29
+ await this.ensureDir();
30
+ const nextTask = cloneTask(task);
31
+ const targetPath = this.taskPath(task.id);
32
+ const tmpPath = `${targetPath}.${process.pid}.${Date.now()}.tmp`;
33
+ const payload = `${JSON.stringify(nextTask, null, 2)}\n`;
34
+ await writeFile(tmpPath, payload, "utf8");
35
+ await rename(tmpPath, targetPath);
36
+ }
37
+ /** List all stored task IDs. */
38
+ async listAll() {
39
+ try {
40
+ const entries = await readdir(this.tasksDir);
41
+ return entries
42
+ .filter((name) => name.endsWith(".json"))
43
+ .map((name) => decodeURIComponent(name.slice(0, -5)));
44
+ }
45
+ catch (error) {
46
+ const code = error?.code;
47
+ if (code === "ENOENT") {
48
+ return [];
49
+ }
50
+ throw error;
51
+ }
52
+ }
53
+ /** Delete a task file and report whether anything was removed. */
54
+ async delete(taskId) {
55
+ try {
56
+ await unlink(this.taskPath(taskId));
57
+ return true;
58
+ }
59
+ catch (error) {
60
+ const code = error?.code;
61
+ if (code === "ENOENT") {
62
+ return false;
63
+ }
64
+ throw error;
65
+ }
66
+ }
67
+ taskPath(taskId) {
68
+ return path.join(this.tasksDir, taskFileName(taskId));
69
+ }
70
+ ensureDir() {
71
+ if (!this.dirReady) {
72
+ this.dirReady = mkdir(this.tasksDir, { recursive: true }).then(() => { }, (error) => {
73
+ this.dirReady = null;
74
+ throw error;
75
+ });
76
+ }
77
+ return this.dirReady;
78
+ }
79
+ }
80
+ //# sourceMappingURL=task-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-store.js","sourceRoot":"","sources":["../../src/task-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import type { OpenClawPluginApi, PeerState, CircuitState, HealthStatus } from "./types.js";
2
+ import { A2AMetricsCollector } from "./internal/metrics.js";
3
+ type LoggerLike = Pick<OpenClawPluginApi["logger"], "info" | "warn" | "error">;
4
+ type TerminalTaskState = "completed" | "failed" | "canceled" | "rejected";
5
+ /** Callback to get peer states without importing PeerHealthManager directly. */
6
+ export type PeerStateProvider = () => Map<string, PeerState>;
7
+ /** Callback for audit logging on task completion. */
8
+ export type TaskAuditCallback = (taskId: string, contextId: string, state: string, durationMs: number) => void;
9
+ interface HttpMetrics {
10
+ requests_total: number;
11
+ jsonrpc_requests: number;
12
+ rest_requests: number;
13
+ metrics_requests: number;
14
+ outbound_requests: number;
15
+ security_rejections: number;
16
+ last_request_at?: string;
17
+ }
18
+ interface TaskMetrics {
19
+ queued: number;
20
+ started: number;
21
+ completed: number;
22
+ failed: number;
23
+ canceled: number;
24
+ rejected: number;
25
+ timed_out: number;
26
+ queue_rejections: number;
27
+ active: number;
28
+ queue_depth: number;
29
+ max_active_observed: number;
30
+ max_queue_depth_observed: number;
31
+ total_duration_ms: number;
32
+ finished: number;
33
+ expired: number;
34
+ last_started_at?: string;
35
+ last_finished_at?: string;
36
+ last_cleanup_at?: string;
37
+ }
38
+ interface PeerMetrics {
39
+ health: HealthStatus;
40
+ circuit: CircuitState;
41
+ consecutive_failures: number;
42
+ total_retries: number;
43
+ last_check_at?: string;
44
+ }
45
+ export interface GatewayTelemetrySnapshot {
46
+ protocol: ReturnType<A2AMetricsCollector["getMetrics"]>;
47
+ http: HttpMetrics;
48
+ tasks: TaskMetrics & {
49
+ average_duration_ms: number;
50
+ };
51
+ peers: Record<string, PeerMetrics>;
52
+ }
53
+ export interface GatewayTelemetryOptions {
54
+ structuredLogs?: boolean;
55
+ }
56
+ export declare class GatewayTelemetry {
57
+ private readonly collector;
58
+ private readonly logger;
59
+ private readonly structuredLogs;
60
+ private readonly http;
61
+ private readonly tasks;
62
+ private readonly peerRetries;
63
+ private peerStateProvider;
64
+ private taskAuditCallback;
65
+ constructor(logger: LoggerLike, options?: GatewayTelemetryOptions);
66
+ /** Register a callback to retrieve peer health states for the metrics snapshot. */
67
+ setPeerStateProvider(provider: PeerStateProvider): void;
68
+ /** Register a callback for audit logging on task completion. */
69
+ setTaskAuditCallback(callback: TaskAuditCallback): void;
70
+ recordInboundHttp(route: "jsonrpc" | "rest" | "metrics", statusCode: number, durationMs: number): void;
71
+ recordOutboundRequest(peer: string, ok: boolean, statusCode: number, durationMs: number): void;
72
+ recordPeerHealthCheck(peerName: string, healthy: boolean): void;
73
+ recordPeerCircuitChange(peerName: string, newState: CircuitState): void;
74
+ recordPeerRetry(peerName: string, attempt: number): void;
75
+ getPeerRetries(): Record<string, number>;
76
+ recordSecurityRejection(surface: "http" | "grpc", reason: string): void;
77
+ recordTaskQueued(taskId: string, contextId: string, position: number, queueDepth: number): void;
78
+ recordTaskStart(taskId: string, contextId: string, agentId: string, activeCount: number, queueDepth: number): void;
79
+ recordTaskFinish(taskId: string, contextId: string, state: TerminalTaskState, durationMs: number, activeCount: number, queueDepth: number, errorMessage?: string): void;
80
+ recordQueueRejected(taskId: string, contextId: string, queueDepth: number): void;
81
+ recordTaskExpired(taskId: string, state: string): void;
82
+ snapshot(): GatewayTelemetrySnapshot;
83
+ private setQueueState;
84
+ private isTimeoutError;
85
+ private log;
86
+ }
87
+ export {};
88
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":"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"}