@perkos/perkos-a2a 0.10.0 → 0.12.0
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/dist/bridge-agent.js +21 -46
- package/dist/bridge-agent.js.map +1 -1
- package/dist/bridge-chat-reply.d.ts +85 -0
- package/dist/bridge-chat-reply.d.ts.map +1 -0
- package/dist/bridge-chat-reply.js +167 -0
- package/dist/bridge-chat-reply.js.map +1 -0
- package/dist/gateway-health.d.ts +84 -0
- package/dist/gateway-health.d.ts.map +1 -0
- package/dist/gateway-health.js +148 -0
- package/dist/gateway-health.js.map +1 -0
- package/package.json +1 -1
package/dist/bridge-agent.js
CHANGED
|
@@ -16,7 +16,9 @@ import { createServer as createHttpServer } from "node:http";
|
|
|
16
16
|
import { A2AServer } from "./server.js";
|
|
17
17
|
import { ChatClient } from "./chat-client.js";
|
|
18
18
|
import { ConvRegistry } from "./conv-registry.js";
|
|
19
|
+
import { startGatewayHealthReporter } from "./gateway-health.js";
|
|
19
20
|
import { startToolsTokenListener } from "./tools-token-listener.js";
|
|
21
|
+
import { deliverToHermes, handleChatDeliver, parseWalletFromIdentity, } from "./bridge-chat-reply.js";
|
|
20
22
|
function argValue(flag) {
|
|
21
23
|
const idx = process.argv.indexOf(flag);
|
|
22
24
|
if (idx === -1)
|
|
@@ -124,41 +126,10 @@ function buildRuntimeMessage(task, text) {
|
|
|
124
126
|
text,
|
|
125
127
|
].join("\n");
|
|
126
128
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const sessionKey = runtime.sessionKey || process.env.HERMES_SESSION_ID || process.env.HERMES_SESSION_KEY || "a2a";
|
|
132
|
-
const token = runtime.hermesToken || process.env.API_SERVER_KEY || process.env.HERMES_API_KEY || process.env.HERMES_WORKSPACE_TOKEN || process.env.HERMES_SESSION_TOKEN;
|
|
133
|
-
const url = `${baseUrl}${endpoint.startsWith("/") ? endpoint : `/${endpoint}`}`;
|
|
134
|
-
const headers = {
|
|
135
|
-
"content-type": "application/json",
|
|
136
|
-
"x-hermes-session-id": sessionKey,
|
|
137
|
-
"x-hermes-session-key": sessionKey,
|
|
138
|
-
};
|
|
139
|
-
if (token)
|
|
140
|
-
headers.authorization = `Bearer ${token}`;
|
|
141
|
-
const normalizedEndpoint = endpoint.replace(/^\/?/, "/");
|
|
142
|
-
const body = normalizedEndpoint.startsWith("/v1/chat/completions")
|
|
143
|
-
? { model: process.env.HERMES_MODEL || "hermes-agent", messages: [{ role: "user", content: message }], stream: false }
|
|
144
|
-
: normalizedEndpoint.startsWith("/v1/runs")
|
|
145
|
-
? { input: message, session_id: sessionKey }
|
|
146
|
-
: normalizedEndpoint.startsWith("/v1/responses")
|
|
147
|
-
? { model: process.env.HERMES_MODEL || "hermes-agent", input: message, store: true }
|
|
148
|
-
: { sessionKey, message };
|
|
149
|
-
const response = await fetch(url, { method: "POST", headers, body: JSON.stringify(body) });
|
|
150
|
-
if (!response.ok) {
|
|
151
|
-
const text = await response.text().catch(() => "");
|
|
152
|
-
throw new Error(`Hermes API delivery failed (${response.status}) at ${url}: ${text || response.statusText}`);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
/** Extract a wallet address from a ChatIdentity ("user:0xabc..." → "0xabc..."). */
|
|
156
|
-
function parseWalletFromIdentity(identity) {
|
|
157
|
-
if (typeof identity !== "string" || !identity.startsWith("user:"))
|
|
158
|
-
return null;
|
|
159
|
-
const addr = identity.slice("user:".length);
|
|
160
|
-
return addr.startsWith("0x") ? addr.toLowerCase() : null;
|
|
161
|
-
}
|
|
129
|
+
// `deliverToHermes`, `parseWalletFromIdentity`, `handleChatDeliver`,
|
|
130
|
+
// `autoReplyEnabled`, and `extractAssistantText` now live in
|
|
131
|
+
// `./bridge-chat-reply.ts` so they can be unit-tested without importing
|
|
132
|
+
// this file (and triggering its top-level `main()`). Re-imported above.
|
|
162
133
|
function buildChatMessage(frame) {
|
|
163
134
|
const walletAddress = parseWalletFromIdentity(frame.from);
|
|
164
135
|
const marker = `[PERKOS_CHAT:${frame.convId}]`;
|
|
@@ -301,6 +272,13 @@ async function main() {
|
|
|
301
272
|
});
|
|
302
273
|
await server.start();
|
|
303
274
|
logger.info(`[perkos-a2a] standalone bridge running for ${config.agentName} (${config.runtime?.kind || "hermes"})`);
|
|
275
|
+
// Kick off the messaging-gateways health report. Fire-and-forget —
|
|
276
|
+
// a slow POST must never block bridge startup. The reporter waits
|
|
277
|
+
// PERKOS_GATEWAY_REPORT_DELAY_MS (default 30s) before POSTing so
|
|
278
|
+
// Hermes has had a chance to actually attempt platform connect.
|
|
279
|
+
// No-ops cleanly when PERKOS_AGENT_ID/A2A_AGENT_NAME/A2A_RELAY_API_KEY
|
|
280
|
+
// aren't set (older deploys).
|
|
281
|
+
void startGatewayHealthReporter({ logger });
|
|
304
282
|
// -------------------------------------------------------------------------
|
|
305
283
|
// Optional: PerkOS-Chat client for user-facing conversations.
|
|
306
284
|
//
|
|
@@ -320,17 +298,14 @@ async function main() {
|
|
|
320
298
|
config: chatCfg,
|
|
321
299
|
handlers: {
|
|
322
300
|
logger,
|
|
323
|
-
onChatDeliver:
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
logger.error(`[perkos-chat] hermes delivery failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
332
|
-
}
|
|
333
|
-
},
|
|
301
|
+
onChatDeliver: (frame) => handleChatDeliver({
|
|
302
|
+
frame,
|
|
303
|
+
config,
|
|
304
|
+
buildMessage: buildChatMessage,
|
|
305
|
+
convRegistry,
|
|
306
|
+
getChat: () => chat,
|
|
307
|
+
logger,
|
|
308
|
+
}),
|
|
334
309
|
onChannelJoin: async (frame) => {
|
|
335
310
|
logger.info(`[perkos-chat] joined conv ${frame.convId} (host: ${frame.historyHost}, ${frame.participants.length} participants)`);
|
|
336
311
|
},
|
package/dist/bridge-agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-agent.js","sourceRoot":"","sources":["../src/bridge-agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bridge-agent.js","sourceRoot":"","sources":["../src/bridge-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for the optional `A2A_HERMES_AUTO_REPLY` path used by the
|
|
3
|
+
* standalone bridge (`bridge-agent.ts`).
|
|
4
|
+
*
|
|
5
|
+
* Pulled into a separate module so they can be unit-tested without
|
|
6
|
+
* importing `bridge-agent.ts` (whose top-level `main()` invocation
|
|
7
|
+
* would otherwise try to start servers).
|
|
8
|
+
*/
|
|
9
|
+
import type { A2APluginConfig } from "./types.js";
|
|
10
|
+
import type { ChatDeliverFrame, ChatMessageInboundFrame } from "./chat-types.js";
|
|
11
|
+
/**
|
|
12
|
+
* POST a message to the Hermes API server.
|
|
13
|
+
*
|
|
14
|
+
* Historically returned `void` and discarded the response body — the design
|
|
15
|
+
* assumed Hermes would make a callback into the bridge's local `/chat/reply`
|
|
16
|
+
* listener with the LLM's reply text. That path only works when bridge and
|
|
17
|
+
* Hermes share a loopback (co-located deploy).
|
|
18
|
+
*
|
|
19
|
+
* When `wantResponse` is true, the parsed JSON body is returned instead so
|
|
20
|
+
* the caller can extract the assistant text and short-circuit the callback
|
|
21
|
+
* step. This is opt-in (gated by `A2A_HERMES_AUTO_REPLY` upstream) so the
|
|
22
|
+
* existing co-located deploy keeps its byte-identical behavior — both the
|
|
23
|
+
* skipped body-read and the same throw-on-non-2xx path.
|
|
24
|
+
*/
|
|
25
|
+
export declare function deliverToHermes(config: A2APluginConfig, message: string, wantResponse?: boolean): Promise<unknown>;
|
|
26
|
+
/** Whether the standalone bridge should auto-deliver Hermes replies back through chat. */
|
|
27
|
+
export declare function autoReplyEnabled(): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Pull the assistant text out of a Hermes response. Supports two response
|
|
30
|
+
* shapes the bridge may see depending on `HERMES_API_ENDPOINT`:
|
|
31
|
+
*
|
|
32
|
+
* - `/v1/responses` → `{ output: [{ content: [{ type: "output_text", text }] }] }`
|
|
33
|
+
* - `/v1/chat/completions` → `{ choices: [{ message: { content } }] }`
|
|
34
|
+
*
|
|
35
|
+
* Returns the first non-empty text found, or `null` if nothing usable is
|
|
36
|
+
* present. Tolerates partial / malformed bodies — never throws.
|
|
37
|
+
*/
|
|
38
|
+
export declare function extractAssistantText(resp: unknown): string | null;
|
|
39
|
+
/** Extract a wallet address from a ChatIdentity ("user:0xabc..." → "0xabc..."). */
|
|
40
|
+
export declare function parseWalletFromIdentity(identity: string): string | null;
|
|
41
|
+
/**
|
|
42
|
+
* Minimal logger surface used by `handleChatDeliver`. Compatible with
|
|
43
|
+
* `console`, but typed narrowly so tests can pass a vitest spy object.
|
|
44
|
+
*/
|
|
45
|
+
export interface ChatDeliverLogger {
|
|
46
|
+
error: (...a: unknown[]) => void;
|
|
47
|
+
info?: (...a: unknown[]) => void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Minimal chat surface used by `handleChatDeliver`. Lets tests pass a
|
|
51
|
+
* stubbed object without constructing a real `ChatClient` + WebSocket.
|
|
52
|
+
*/
|
|
53
|
+
export interface ChatReplySender {
|
|
54
|
+
sendReply: (opts: {
|
|
55
|
+
convId: string;
|
|
56
|
+
walletAddress: string;
|
|
57
|
+
text: string;
|
|
58
|
+
replyTo?: string | null;
|
|
59
|
+
}) => Promise<{
|
|
60
|
+
id: string;
|
|
61
|
+
delivered: boolean;
|
|
62
|
+
}>;
|
|
63
|
+
}
|
|
64
|
+
/** Minimal conv-registry surface used by `handleChatDeliver`. */
|
|
65
|
+
export interface ConvTouch {
|
|
66
|
+
touch: (convId: string, wallet: string, role?: "user" | "admin") => void;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Handle a single inbound chat frame: forward to Hermes, and — when
|
|
70
|
+
* `A2A_HERMES_AUTO_REPLY=true` — extract the assistant text from the
|
|
71
|
+
* Hermes response and post it back through the chat WS directly.
|
|
72
|
+
*
|
|
73
|
+
* Exported for unit tests. The flag-off path is byte-identical to the
|
|
74
|
+
* 0.11.0 behavior: `deliverToHermes` is called with `wantResponse=false`,
|
|
75
|
+
* so it returns `undefined` and the response body is never read.
|
|
76
|
+
*/
|
|
77
|
+
export declare function handleChatDeliver(opts: {
|
|
78
|
+
frame: ChatDeliverFrame | ChatMessageInboundFrame;
|
|
79
|
+
config: A2APluginConfig;
|
|
80
|
+
buildMessage: (frame: ChatDeliverFrame | ChatMessageInboundFrame) => string;
|
|
81
|
+
convRegistry: ConvTouch;
|
|
82
|
+
getChat: () => ChatReplySender | null;
|
|
83
|
+
logger: ChatDeliverLogger;
|
|
84
|
+
}): Promise<void>;
|
|
85
|
+
//# sourceMappingURL=bridge-chat-reply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-chat-reply.d.ts","sourceRoot":"","sources":["../src/bridge-chat-reply.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAEjF;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,YAAY,UAAQ,GACnB,OAAO,CAAC,OAAO,CAAC,CAkClB;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAkCjE;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIvE;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,CAAC,IAAI,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACnD;AAED,iEAAiE;AACjE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,KAAK,IAAI,CAAC;CAC1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,KAAK,EAAE,gBAAgB,GAAG,uBAAuB,CAAC;IAClD,MAAM,EAAE,eAAe,CAAC;IACxB,YAAY,EAAE,CAAC,KAAK,EAAE,gBAAgB,GAAG,uBAAuB,KAAK,MAAM,CAAC;IAC5E,YAAY,EAAE,SAAS,CAAC;IACxB,OAAO,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IACtC,MAAM,EAAE,iBAAiB,CAAC;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAmChB"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for the optional `A2A_HERMES_AUTO_REPLY` path used by the
|
|
3
|
+
* standalone bridge (`bridge-agent.ts`).
|
|
4
|
+
*
|
|
5
|
+
* Pulled into a separate module so they can be unit-tested without
|
|
6
|
+
* importing `bridge-agent.ts` (whose top-level `main()` invocation
|
|
7
|
+
* would otherwise try to start servers).
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* POST a message to the Hermes API server.
|
|
11
|
+
*
|
|
12
|
+
* Historically returned `void` and discarded the response body — the design
|
|
13
|
+
* assumed Hermes would make a callback into the bridge's local `/chat/reply`
|
|
14
|
+
* listener with the LLM's reply text. That path only works when bridge and
|
|
15
|
+
* Hermes share a loopback (co-located deploy).
|
|
16
|
+
*
|
|
17
|
+
* When `wantResponse` is true, the parsed JSON body is returned instead so
|
|
18
|
+
* the caller can extract the assistant text and short-circuit the callback
|
|
19
|
+
* step. This is opt-in (gated by `A2A_HERMES_AUTO_REPLY` upstream) so the
|
|
20
|
+
* existing co-located deploy keeps its byte-identical behavior — both the
|
|
21
|
+
* skipped body-read and the same throw-on-non-2xx path.
|
|
22
|
+
*/
|
|
23
|
+
export async function deliverToHermes(config, message, wantResponse = false) {
|
|
24
|
+
const runtime = config.runtime || {};
|
|
25
|
+
const baseUrl = (runtime.hermesUrl || process.env.HERMES_API_URL || process.env.HERMES_WORKSPACE_URL || "http://127.0.0.1:8642").replace(/\/+$/, "");
|
|
26
|
+
const endpoint = runtime.hermesEndpoint || process.env.HERMES_API_ENDPOINT || process.env.HERMES_WORKSPACE_ENDPOINT || "/v1/responses";
|
|
27
|
+
const sessionKey = runtime.sessionKey || process.env.HERMES_SESSION_ID || process.env.HERMES_SESSION_KEY || "a2a";
|
|
28
|
+
const token = runtime.hermesToken || process.env.API_SERVER_KEY || process.env.HERMES_API_KEY || process.env.HERMES_WORKSPACE_TOKEN || process.env.HERMES_SESSION_TOKEN;
|
|
29
|
+
const url = `${baseUrl}${endpoint.startsWith("/") ? endpoint : `/${endpoint}`}`;
|
|
30
|
+
const headers = {
|
|
31
|
+
"content-type": "application/json",
|
|
32
|
+
"x-hermes-session-id": sessionKey,
|
|
33
|
+
"x-hermes-session-key": sessionKey,
|
|
34
|
+
};
|
|
35
|
+
if (token)
|
|
36
|
+
headers.authorization = `Bearer ${token}`;
|
|
37
|
+
const normalizedEndpoint = endpoint.replace(/^\/?/, "/");
|
|
38
|
+
const body = normalizedEndpoint.startsWith("/v1/chat/completions")
|
|
39
|
+
? { model: process.env.HERMES_MODEL || "hermes-agent", messages: [{ role: "user", content: message }], stream: false }
|
|
40
|
+
: normalizedEndpoint.startsWith("/v1/runs")
|
|
41
|
+
? { input: message, session_id: sessionKey }
|
|
42
|
+
: normalizedEndpoint.startsWith("/v1/responses")
|
|
43
|
+
? { model: process.env.HERMES_MODEL || "hermes-agent", input: message, store: true }
|
|
44
|
+
: { sessionKey, message };
|
|
45
|
+
const response = await fetch(url, { method: "POST", headers, body: JSON.stringify(body) });
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
const text = await response.text().catch(() => "");
|
|
48
|
+
throw new Error(`Hermes API delivery failed (${response.status}) at ${url}: ${text || response.statusText}`);
|
|
49
|
+
}
|
|
50
|
+
if (!wantResponse)
|
|
51
|
+
return undefined;
|
|
52
|
+
try {
|
|
53
|
+
return await response.json();
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** Whether the standalone bridge should auto-deliver Hermes replies back through chat. */
|
|
60
|
+
export function autoReplyEnabled() {
|
|
61
|
+
return String(process.env.A2A_HERMES_AUTO_REPLY || "").toLowerCase() === "true";
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Pull the assistant text out of a Hermes response. Supports two response
|
|
65
|
+
* shapes the bridge may see depending on `HERMES_API_ENDPOINT`:
|
|
66
|
+
*
|
|
67
|
+
* - `/v1/responses` → `{ output: [{ content: [{ type: "output_text", text }] }] }`
|
|
68
|
+
* - `/v1/chat/completions` → `{ choices: [{ message: { content } }] }`
|
|
69
|
+
*
|
|
70
|
+
* Returns the first non-empty text found, or `null` if nothing usable is
|
|
71
|
+
* present. Tolerates partial / malformed bodies — never throws.
|
|
72
|
+
*/
|
|
73
|
+
export function extractAssistantText(resp) {
|
|
74
|
+
if (!resp || typeof resp !== "object")
|
|
75
|
+
return null;
|
|
76
|
+
const r = resp;
|
|
77
|
+
// /v1/responses shape
|
|
78
|
+
const output = r.output;
|
|
79
|
+
if (Array.isArray(output)) {
|
|
80
|
+
for (const item of output) {
|
|
81
|
+
if (!item || typeof item !== "object")
|
|
82
|
+
continue;
|
|
83
|
+
const content = item.content;
|
|
84
|
+
if (!Array.isArray(content))
|
|
85
|
+
continue;
|
|
86
|
+
for (const part of content) {
|
|
87
|
+
if (!part || typeof part !== "object")
|
|
88
|
+
continue;
|
|
89
|
+
const p = part;
|
|
90
|
+
// `type: "output_text"` is the OpenAI Responses convention; accept
|
|
91
|
+
// any part with a string `text` to stay forgiving.
|
|
92
|
+
if (typeof p.text === "string" && p.text.trim())
|
|
93
|
+
return p.text;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// /v1/chat/completions shape
|
|
98
|
+
const choices = r.choices;
|
|
99
|
+
if (Array.isArray(choices)) {
|
|
100
|
+
for (const choice of choices) {
|
|
101
|
+
if (!choice || typeof choice !== "object")
|
|
102
|
+
continue;
|
|
103
|
+
const message = choice.message;
|
|
104
|
+
if (!message || typeof message !== "object")
|
|
105
|
+
continue;
|
|
106
|
+
const content = message.content;
|
|
107
|
+
if (typeof content === "string" && content.trim())
|
|
108
|
+
return content;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
/** Extract a wallet address from a ChatIdentity ("user:0xabc..." → "0xabc..."). */
|
|
114
|
+
export function parseWalletFromIdentity(identity) {
|
|
115
|
+
if (typeof identity !== "string" || !identity.startsWith("user:"))
|
|
116
|
+
return null;
|
|
117
|
+
const addr = identity.slice("user:".length);
|
|
118
|
+
return addr.startsWith("0x") ? addr.toLowerCase() : null;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Handle a single inbound chat frame: forward to Hermes, and — when
|
|
122
|
+
* `A2A_HERMES_AUTO_REPLY=true` — extract the assistant text from the
|
|
123
|
+
* Hermes response and post it back through the chat WS directly.
|
|
124
|
+
*
|
|
125
|
+
* Exported for unit tests. The flag-off path is byte-identical to the
|
|
126
|
+
* 0.11.0 behavior: `deliverToHermes` is called with `wantResponse=false`,
|
|
127
|
+
* so it returns `undefined` and the response body is never read.
|
|
128
|
+
*/
|
|
129
|
+
export async function handleChatDeliver(opts) {
|
|
130
|
+
const { frame, config, buildMessage, convRegistry, getChat, logger } = opts;
|
|
131
|
+
const autoReply = autoReplyEnabled();
|
|
132
|
+
try {
|
|
133
|
+
const wallet = parseWalletFromIdentity(frame.from);
|
|
134
|
+
if (wallet)
|
|
135
|
+
convRegistry.touch(frame.convId, wallet, "user");
|
|
136
|
+
const hermesResp = await deliverToHermes(config, buildMessage(frame), autoReply);
|
|
137
|
+
if (!autoReply)
|
|
138
|
+
return;
|
|
139
|
+
const text = extractAssistantText(hermesResp);
|
|
140
|
+
if (!text) {
|
|
141
|
+
logger.error(`[perkos-chat] no assistant text in Hermes response for conv ${frame.convId}`);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (!wallet) {
|
|
145
|
+
// No wallet on the inbound frame (e.g. agent-to-agent message). Can't
|
|
146
|
+
// address a chat_reply without a wallet, so just log and bail rather
|
|
147
|
+
// than silently dropping the text.
|
|
148
|
+
logger.error(`[perkos-chat] auto-reply skipped: no wallet parsed from ${frame.from}`);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const chat = getChat();
|
|
152
|
+
if (!chat) {
|
|
153
|
+
logger.error(`[perkos-chat] auto-reply skipped: chat client not initialized`);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
await chat.sendReply({ convId: frame.convId, walletAddress: wallet, text });
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
logger.error(`[perkos-chat] sendReply failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
logger.error(`[perkos-chat] hermes delivery failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=bridge-chat-reply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-chat-reply.js","sourceRoot":"","sources":["../src/bridge-chat-reply.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,OAAe,EACf,YAAY,GAAG,KAAK;IAEpB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,uBAAuB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrJ,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,eAAe,CAAC;IACvI,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAC;IAClH,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACxK,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,EAAE,CAAC;IAChF,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,qBAAqB,EAAE,UAAU;QACjC,sBAAsB,EAAE,UAAU;KACnC,CAAC;IACF,IAAI,KAAK;QAAE,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;IAErD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,sBAAsB,CAAC;QAChE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE;QACtH,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,UAAU,CAAC;YACzC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE;YAC5C,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,eAAe,CAAC;gBAC9C,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;gBACpF,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3F,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IACpC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;AAClF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAa;IAChD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,CAAC,GAAG,IAA+B,CAAC;IAE1C,sBAAsB;IACtB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACxB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAChD,MAAM,OAAO,GAAI,IAAgC,CAAC,OAAO,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;gBAAE,SAAS;YACtC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;oBAAE,SAAS;gBAChD,MAAM,CAAC,GAAG,IAA+B,CAAC;gBAC1C,mEAAmE;gBACnE,mDAAmD;gBACnD,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,OAAO,CAAC,CAAC,IAAI,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACpD,MAAM,OAAO,GAAI,MAAkC,CAAC,OAAO,CAAC;YAC5D,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,SAAS;YACtD,MAAM,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC;YAC7D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;gBAAE,OAAO,OAAO,CAAC;QACpE,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/E,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AA6BD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAOvC;IACC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5E,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,MAAM;YAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;QAEjF,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,MAAM,IAAI,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,+DAA+D,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,sEAAsE;YACtE,qEAAqE;YACrE,mCAAmC;YACnC,MAAM,CAAC,KAAK,CAAC,2DAA2D,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YAC9E,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,yCAAyC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5G,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway health reporter.
|
|
3
|
+
*
|
|
4
|
+
* The PerkOS mini-app's `POST /api/agents/[agentId]/gateways/[type]/status`
|
|
5
|
+
* route flips a gateway's status from "pending" (set when the wallet
|
|
6
|
+
* configures it in the wizard) to "active" or "error". Without
|
|
7
|
+
* something calling it, every gateway sits at "pending" forever in
|
|
8
|
+
* the admin panel even when it's actually responding to messages.
|
|
9
|
+
*
|
|
10
|
+
* This module is the bridge's side of that endpoint. At startup it
|
|
11
|
+
* reads the runtime's env to learn which gateways the operator
|
|
12
|
+
* enabled, waits a configurable amount of time to give Hermes a
|
|
13
|
+
* chance to actually attempt connect, then POSTs `active` for each
|
|
14
|
+
* configured gateway. POST failures are logged but never block the
|
|
15
|
+
* bridge — the admin panel staying at "pending" is preferable to a
|
|
16
|
+
* dead bridge.
|
|
17
|
+
*
|
|
18
|
+
* Why presence-based reporting (not real Hermes platform polling):
|
|
19
|
+
* Hermes upstream exposes connected-platform state only as a
|
|
20
|
+
* Python-internal getter (gateway/config.py: get_connected_platforms).
|
|
21
|
+
* There's no HTTP route we can hit from the sidecar without first
|
|
22
|
+
* building one. Reporting "active" for every configured gateway
|
|
23
|
+
* is the simplest signal that's better than the "pending forever"
|
|
24
|
+
* floor. Once Hermes adds the route (or we ship our own plugin
|
|
25
|
+
* that exposes it), this module can be extended to read real
|
|
26
|
+
* state without changing its contract with the mini-app.
|
|
27
|
+
*
|
|
28
|
+
* Inputs (env, all optional):
|
|
29
|
+
* PERKOS_AGENT_ID — per-wallet agent doc id (required to
|
|
30
|
+
* form the URL). Without it, we skip
|
|
31
|
+
* reporting silently (acceptable: the
|
|
32
|
+
* bridge predates the gateways feature
|
|
33
|
+
* in some deploys).
|
|
34
|
+
* A2A_AGENT_NAME — global agent name; sent as x-agent-name
|
|
35
|
+
* header so the gateways/status endpoint
|
|
36
|
+
* can verify the relay key.
|
|
37
|
+
* A2A_RELAY_API_KEY — bearer for the gateways/status endpoint
|
|
38
|
+
* (same secret the bridge already uses
|
|
39
|
+
* to authenticate to chat.perkos.xyz).
|
|
40
|
+
* PERKOS_GATEWAY_STATUS_URL — base URL, defaults to
|
|
41
|
+
* https://app.perkos.xyz/api/agents.
|
|
42
|
+
* PERKOS_GATEWAY_REPORT_DELAY_MS — how long to wait after bridge
|
|
43
|
+
* start before reporting. Default 30s.
|
|
44
|
+
*
|
|
45
|
+
* Inputs (env, per-gateway):
|
|
46
|
+
* TELEGRAM_ENABLED / FARCASTER_ENABLED / SLACK_ENABLED — set "true"
|
|
47
|
+
* by perkos-entrypoint.sh on the
|
|
48
|
+
* runtime container when the gateway
|
|
49
|
+
* has its required secrets. The
|
|
50
|
+
* ECS task def now passes these env
|
|
51
|
+
* vars to the bridge as well (see
|
|
52
|
+
* PerkOS#TBD).
|
|
53
|
+
*/
|
|
54
|
+
type Logger = {
|
|
55
|
+
info: (...args: unknown[]) => void;
|
|
56
|
+
warn: (...args: unknown[]) => void;
|
|
57
|
+
error: (...args: unknown[]) => void;
|
|
58
|
+
};
|
|
59
|
+
type Env = Readonly<Record<string, string | undefined>>;
|
|
60
|
+
export declare const KNOWN_GATEWAYS: readonly ["telegram", "farcaster", "slack"];
|
|
61
|
+
export type KnownGateway = (typeof KNOWN_GATEWAYS)[number];
|
|
62
|
+
export type GatewayHealthOptions = {
|
|
63
|
+
env?: Env;
|
|
64
|
+
logger?: Logger;
|
|
65
|
+
/** Override the fetch implementation (tests). */
|
|
66
|
+
fetcher?: typeof fetch;
|
|
67
|
+
/** Override the delay before posting (tests; default reads env). */
|
|
68
|
+
delayMs?: number;
|
|
69
|
+
};
|
|
70
|
+
export type ReportOutcome = {
|
|
71
|
+
gateway: KnownGateway;
|
|
72
|
+
ok: boolean;
|
|
73
|
+
status: number | null;
|
|
74
|
+
error?: string;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* One-shot reporter. Schedules itself after the configured delay,
|
|
78
|
+
* then resolves with the list of per-gateway outcomes. The bridge
|
|
79
|
+
* never awaits this; it's fire-and-forget so a slow POST can't
|
|
80
|
+
* delay agent boot.
|
|
81
|
+
*/
|
|
82
|
+
export declare function startGatewayHealthReporter(opts?: GatewayHealthOptions): Promise<ReportOutcome[]>;
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=gateway-health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-health.d.ts","sourceRoot":"","sources":["../src/gateway-health.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,KAAK,MAAM,GAAG;IACZ,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrC,CAAC;AAEF,KAAK,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAExD,eAAO,MAAM,cAAc,6CAA8C,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAa3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAwDpG"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway health reporter.
|
|
3
|
+
*
|
|
4
|
+
* The PerkOS mini-app's `POST /api/agents/[agentId]/gateways/[type]/status`
|
|
5
|
+
* route flips a gateway's status from "pending" (set when the wallet
|
|
6
|
+
* configures it in the wizard) to "active" or "error". Without
|
|
7
|
+
* something calling it, every gateway sits at "pending" forever in
|
|
8
|
+
* the admin panel even when it's actually responding to messages.
|
|
9
|
+
*
|
|
10
|
+
* This module is the bridge's side of that endpoint. At startup it
|
|
11
|
+
* reads the runtime's env to learn which gateways the operator
|
|
12
|
+
* enabled, waits a configurable amount of time to give Hermes a
|
|
13
|
+
* chance to actually attempt connect, then POSTs `active` for each
|
|
14
|
+
* configured gateway. POST failures are logged but never block the
|
|
15
|
+
* bridge — the admin panel staying at "pending" is preferable to a
|
|
16
|
+
* dead bridge.
|
|
17
|
+
*
|
|
18
|
+
* Why presence-based reporting (not real Hermes platform polling):
|
|
19
|
+
* Hermes upstream exposes connected-platform state only as a
|
|
20
|
+
* Python-internal getter (gateway/config.py: get_connected_platforms).
|
|
21
|
+
* There's no HTTP route we can hit from the sidecar without first
|
|
22
|
+
* building one. Reporting "active" for every configured gateway
|
|
23
|
+
* is the simplest signal that's better than the "pending forever"
|
|
24
|
+
* floor. Once Hermes adds the route (or we ship our own plugin
|
|
25
|
+
* that exposes it), this module can be extended to read real
|
|
26
|
+
* state without changing its contract with the mini-app.
|
|
27
|
+
*
|
|
28
|
+
* Inputs (env, all optional):
|
|
29
|
+
* PERKOS_AGENT_ID — per-wallet agent doc id (required to
|
|
30
|
+
* form the URL). Without it, we skip
|
|
31
|
+
* reporting silently (acceptable: the
|
|
32
|
+
* bridge predates the gateways feature
|
|
33
|
+
* in some deploys).
|
|
34
|
+
* A2A_AGENT_NAME — global agent name; sent as x-agent-name
|
|
35
|
+
* header so the gateways/status endpoint
|
|
36
|
+
* can verify the relay key.
|
|
37
|
+
* A2A_RELAY_API_KEY — bearer for the gateways/status endpoint
|
|
38
|
+
* (same secret the bridge already uses
|
|
39
|
+
* to authenticate to chat.perkos.xyz).
|
|
40
|
+
* PERKOS_GATEWAY_STATUS_URL — base URL, defaults to
|
|
41
|
+
* https://app.perkos.xyz/api/agents.
|
|
42
|
+
* PERKOS_GATEWAY_REPORT_DELAY_MS — how long to wait after bridge
|
|
43
|
+
* start before reporting. Default 30s.
|
|
44
|
+
*
|
|
45
|
+
* Inputs (env, per-gateway):
|
|
46
|
+
* TELEGRAM_ENABLED / FARCASTER_ENABLED / SLACK_ENABLED — set "true"
|
|
47
|
+
* by perkos-entrypoint.sh on the
|
|
48
|
+
* runtime container when the gateway
|
|
49
|
+
* has its required secrets. The
|
|
50
|
+
* ECS task def now passes these env
|
|
51
|
+
* vars to the bridge as well (see
|
|
52
|
+
* PerkOS#TBD).
|
|
53
|
+
*/
|
|
54
|
+
export const KNOWN_GATEWAYS = ["telegram", "farcaster", "slack"];
|
|
55
|
+
const DEFAULT_BASE_URL = "https://app.perkos.xyz/api/agents";
|
|
56
|
+
const DEFAULT_DELAY_MS = 30_000;
|
|
57
|
+
const POST_TIMEOUT_MS = 10_000;
|
|
58
|
+
function enabledFromEnv(env, gateway) {
|
|
59
|
+
const flag = env[`${gateway.toUpperCase()}_ENABLED`];
|
|
60
|
+
if (!flag)
|
|
61
|
+
return false;
|
|
62
|
+
const v = flag.trim().toLowerCase();
|
|
63
|
+
return v === "true" || v === "1" || v === "yes";
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* One-shot reporter. Schedules itself after the configured delay,
|
|
67
|
+
* then resolves with the list of per-gateway outcomes. The bridge
|
|
68
|
+
* never awaits this; it's fire-and-forget so a slow POST can't
|
|
69
|
+
* delay agent boot.
|
|
70
|
+
*/
|
|
71
|
+
export function startGatewayHealthReporter(opts = {}) {
|
|
72
|
+
const env = opts.env ?? process.env;
|
|
73
|
+
const log = opts.logger ?? console;
|
|
74
|
+
const fetcher = opts.fetcher ?? fetch;
|
|
75
|
+
const agentId = env.PERKOS_AGENT_ID?.trim();
|
|
76
|
+
const agentName = env.A2A_AGENT_NAME?.trim();
|
|
77
|
+
const relayKey = env.A2A_RELAY_API_KEY?.trim();
|
|
78
|
+
if (!agentId || !agentName || !relayKey) {
|
|
79
|
+
// Not a failure — old deploys / dev containers may not set these.
|
|
80
|
+
// The admin panel will show "pending" for the affected gateways
|
|
81
|
+
// until the operator rotates the bridge.
|
|
82
|
+
log.info("[gateway-health] missing PERKOS_AGENT_ID / A2A_AGENT_NAME / A2A_RELAY_API_KEY — skipping startup health report");
|
|
83
|
+
return Promise.resolve([]);
|
|
84
|
+
}
|
|
85
|
+
const enabled = KNOWN_GATEWAYS.filter((g) => enabledFromEnv(env, g));
|
|
86
|
+
if (!enabled.length) {
|
|
87
|
+
log.info("[gateway-health] no gateways enabled in env — nothing to report");
|
|
88
|
+
return Promise.resolve([]);
|
|
89
|
+
}
|
|
90
|
+
const baseUrl = (env.PERKOS_GATEWAY_STATUS_URL?.trim() || DEFAULT_BASE_URL).replace(/\/+$/, "");
|
|
91
|
+
const delayMs = opts.delayMs ??
|
|
92
|
+
(() => {
|
|
93
|
+
const raw = env.PERKOS_GATEWAY_REPORT_DELAY_MS;
|
|
94
|
+
if (!raw)
|
|
95
|
+
return DEFAULT_DELAY_MS;
|
|
96
|
+
const parsed = Number(raw);
|
|
97
|
+
return Number.isFinite(parsed) && parsed >= 0 ? parsed : DEFAULT_DELAY_MS;
|
|
98
|
+
})();
|
|
99
|
+
log.info(`[gateway-health] will report ${enabled.join(", ")} as active in ${delayMs}ms`);
|
|
100
|
+
return new Promise((resolve) => {
|
|
101
|
+
setTimeout(async () => {
|
|
102
|
+
const results = [];
|
|
103
|
+
for (const gateway of enabled) {
|
|
104
|
+
results.push(await postOne(fetcher, log, {
|
|
105
|
+
baseUrl,
|
|
106
|
+
agentId,
|
|
107
|
+
agentName,
|
|
108
|
+
relayKey,
|
|
109
|
+
gateway,
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
resolve(results);
|
|
113
|
+
}, delayMs);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async function postOne(fetcher, log, args) {
|
|
117
|
+
const url = `${args.baseUrl}/${encodeURIComponent(args.agentId)}/gateways/${args.gateway}/status`;
|
|
118
|
+
const controller = new AbortController();
|
|
119
|
+
const timer = setTimeout(() => controller.abort(), POST_TIMEOUT_MS);
|
|
120
|
+
try {
|
|
121
|
+
const response = await fetcher(url, {
|
|
122
|
+
method: "POST",
|
|
123
|
+
signal: controller.signal,
|
|
124
|
+
headers: {
|
|
125
|
+
authorization: `Bearer ${args.relayKey}`,
|
|
126
|
+
"x-agent-name": args.agentName,
|
|
127
|
+
"content-type": "application/json",
|
|
128
|
+
},
|
|
129
|
+
body: JSON.stringify({ status: "active" }),
|
|
130
|
+
});
|
|
131
|
+
if (response.ok) {
|
|
132
|
+
log.info(`[gateway-health] reported ${args.gateway} → active (${response.status})`);
|
|
133
|
+
return { gateway: args.gateway, ok: true, status: response.status };
|
|
134
|
+
}
|
|
135
|
+
const text = await response.text().catch(() => "");
|
|
136
|
+
log.warn(`[gateway-health] ${args.gateway} report rejected ${response.status}: ${text.slice(0, 200)}`);
|
|
137
|
+
return { gateway: args.gateway, ok: false, status: response.status, error: text };
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
141
|
+
log.warn(`[gateway-health] ${args.gateway} report errored: ${msg}`);
|
|
142
|
+
return { gateway: args.gateway, ok: false, status: null, error: msg };
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
clearTimeout(timer);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=gateway-health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-health.js","sourceRoot":"","sources":["../src/gateway-health.ts"],"names":[],"mappings":"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"}
|