@hol-org/hashnet-mcp 1.0.18 → 1.0.19
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 +2 -2
- package/dist/index.js +154 -100
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -93,7 +93,7 @@ Use `"type": "sse"` if your build expects it.
|
|
|
93
93
|
Categories are exposed as MCP tools (`hol.*`) plus workflows (`workflow.*`):
|
|
94
94
|
- **Discovery**: `hol.search`, `hol.vectorSearch`, `hol.registrySearchByNamespace`, `hol.resolveUaid`
|
|
95
95
|
- **Registration**: `hol.getRegistrationQuote`, `hol.registerAgent`, `hol.waitForRegistrationCompletion`, `hol.updateAgent`
|
|
96
|
-
- **Chat**: `hol.chat.createSession` (uaid
|
|
96
|
+
- **Chat**: `hol.chat.createSession` (uaid), `hol.chat.sendMessage` (sessionId or uaid; auto-creates session), `hol.chat.history`, `hol.chat.compact`, `hol.chat.end`, `hol.closeUaidConnection`
|
|
97
97
|
- **Protocols/Ops**: `hol.listProtocols`, `hol.detectProtocol`, `hol.stats`, `hol.metricsSummary`, `hol.dashboardStats`, `hol.websocketStats`
|
|
98
98
|
- **Credits**: `hol.credits.balance`, `hol.purchaseCredits.hbar`, `hol.x402.minimums`, `hol.x402.buyCredits`
|
|
99
99
|
- **Ledger**: `hol.ledger.challenge`, `hol.ledger.authenticate`
|
|
@@ -122,7 +122,7 @@ Categories are exposed as MCP tools (`hol.*`) plus workflows (`workflow.*`):
|
|
|
122
122
|
- `hol.additionalRegistries` — catalog of additional registries/networks.
|
|
123
123
|
|
|
124
124
|
**Chat**
|
|
125
|
-
- `hol.chat.createSession` — open a session by `uaid
|
|
125
|
+
- `hol.chat.createSession` — open a session by `uaid`.
|
|
126
126
|
- `hol.chat.sendMessage` — send to an existing sessionId or auto-create via `uaid`.
|
|
127
127
|
- `hol.chat.history` / `hol.chat.compact` / `hol.chat.end` — manage chat lifecycle.
|
|
128
128
|
|
package/dist/index.js
CHANGED
|
@@ -5,9 +5,7 @@ import { PassThrough } from "stream";
|
|
|
5
5
|
|
|
6
6
|
// src/mcp.ts
|
|
7
7
|
import { randomUUID } from "crypto";
|
|
8
|
-
import {
|
|
9
|
-
RegistryBrokerError as RegistryBrokerError3
|
|
10
|
-
} from "@hashgraphonline/standards-sdk";
|
|
8
|
+
import { RegistryBrokerError as RegistryBrokerError3 } from "@hashgraphonline/standards-sdk";
|
|
11
9
|
import { FastMCP } from "fastmcp";
|
|
12
10
|
import { z as z3 } from "zod";
|
|
13
11
|
|
|
@@ -126,26 +124,15 @@ var broker = new RegistryBrokerClient({
|
|
|
126
124
|
var brokerLimiter = createLimiter();
|
|
127
125
|
function createLimiter() {
|
|
128
126
|
if (!config.rateLimit) return void 0;
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
if (config.rateLimit.reservoirRefreshAmount !== void 0) {
|
|
140
|
-
limiterOptions.reservoirRefreshAmount = config.rateLimit.reservoirRefreshAmount;
|
|
141
|
-
}
|
|
142
|
-
if (config.rateLimit.reservoirRefreshIntervalMs !== void 0) {
|
|
143
|
-
limiterOptions.reservoirRefreshInterval = config.rateLimit.reservoirRefreshIntervalMs;
|
|
144
|
-
}
|
|
145
|
-
if (config.rateLimit.redis?.url) {
|
|
146
|
-
limiterOptions.datastore = "ioredis";
|
|
147
|
-
limiterOptions.connection = new IORedis(config.rateLimit.redis.url);
|
|
148
|
-
}
|
|
127
|
+
const redisClient = config.rateLimit.redis?.url ? new IORedis(config.rateLimit.redis.url) : void 0;
|
|
128
|
+
const limiterOptions = {
|
|
129
|
+
...config.rateLimit.maxConcurrent !== void 0 ? { maxConcurrent: config.rateLimit.maxConcurrent } : {},
|
|
130
|
+
...config.rateLimit.minTimeMs !== void 0 ? { minTime: config.rateLimit.minTimeMs } : {},
|
|
131
|
+
...config.rateLimit.reservoir !== void 0 ? { reservoir: config.rateLimit.reservoir } : {},
|
|
132
|
+
...config.rateLimit.reservoirRefreshAmount !== void 0 ? { reservoirRefreshAmount: config.rateLimit.reservoirRefreshAmount } : {},
|
|
133
|
+
...config.rateLimit.reservoirRefreshIntervalMs !== void 0 ? { reservoirRefreshInterval: config.rateLimit.reservoirRefreshIntervalMs } : {},
|
|
134
|
+
...redisClient ? { datastore: "ioredis", connection: redisClient } : {}
|
|
135
|
+
};
|
|
149
136
|
if (!limiterOptions.maxConcurrent && !limiterOptions.minTime && !limiterOptions.reservoir && !limiterOptions.datastore) {
|
|
150
137
|
return void 0;
|
|
151
138
|
}
|
|
@@ -153,8 +140,7 @@ function createLimiter() {
|
|
|
153
140
|
}
|
|
154
141
|
async function withBroker(task, label) {
|
|
155
142
|
const run = async () => {
|
|
156
|
-
|
|
157
|
-
if (!config.registryBrokerApiKey && !isLocal) {
|
|
143
|
+
if (!config.registryBrokerApiKey) {
|
|
158
144
|
throw new Error("REGISTRY_BROKER_API_KEY is required to call the registry broker. Set it in your environment or .env file.");
|
|
159
145
|
}
|
|
160
146
|
try {
|
|
@@ -434,7 +420,7 @@ var InsufficientCreditsError = class extends Error {
|
|
|
434
420
|
super(message);
|
|
435
421
|
this.name = "InsufficientCreditsError";
|
|
436
422
|
this.summary = {
|
|
437
|
-
requiredCredits: quote.requiredCredits,
|
|
423
|
+
requiredCredits: quote.requiredCredits ?? 0,
|
|
438
424
|
availableCredits: quote.availableCredits ?? 0,
|
|
439
425
|
shortfallCredits: shortfall,
|
|
440
426
|
estimatedHbar: quote.estimatedHbar,
|
|
@@ -503,7 +489,7 @@ var registrationDefinition = {
|
|
|
503
489
|
run: async ({ context }) => {
|
|
504
490
|
const response = await runCreditAwareRegistration({
|
|
505
491
|
payload: context.payload,
|
|
506
|
-
onShortfall:
|
|
492
|
+
onShortfall: (err) => {
|
|
507
493
|
context.quote = err.summary;
|
|
508
494
|
return "abort";
|
|
509
495
|
}
|
|
@@ -527,8 +513,12 @@ var registrationDefinition = {
|
|
|
527
513
|
timeoutMs: 5 * 6e4
|
|
528
514
|
})
|
|
529
515
|
);
|
|
530
|
-
if (result
|
|
531
|
-
|
|
516
|
+
if (result && typeof result === "object" && "result" in result) {
|
|
517
|
+
const progress = result;
|
|
518
|
+
const maybeUaid = progress.result?.uaid;
|
|
519
|
+
if (typeof maybeUaid === "string") {
|
|
520
|
+
context.uaid = maybeUaid;
|
|
521
|
+
}
|
|
532
522
|
}
|
|
533
523
|
return result;
|
|
534
524
|
}
|
|
@@ -876,7 +866,9 @@ var registryShowcaseDefinition = {
|
|
|
876
866
|
name: "hol.getRegistrationQuote",
|
|
877
867
|
skip: ({ input }) => !input.performCreditCheck,
|
|
878
868
|
run: async ({ context }) => {
|
|
879
|
-
const
|
|
869
|
+
const discoveryRecord = context.discovery && typeof context.discovery === "object" ? context.discovery : null;
|
|
870
|
+
const payload = discoveryRecord?.context?.registrationPayload ?? context.discovery;
|
|
871
|
+
const response = await withBroker((client) => client.getRegistrationQuote(payload));
|
|
880
872
|
context.creditQuote = response;
|
|
881
873
|
return response;
|
|
882
874
|
}
|
|
@@ -991,14 +983,18 @@ var registerAgentAdvancedDefinition = {
|
|
|
991
983
|
name: "hol.getAdditionalRegistries",
|
|
992
984
|
allowDuringDryRun: true,
|
|
993
985
|
skip: ({ input }) => !input.additionalRegistrySelections?.length && !input.updateAdditionalRegistries?.length,
|
|
994
|
-
run: async (
|
|
986
|
+
run: async ({ context }) => {
|
|
987
|
+
const catalog = await withBroker((client) => client.getAdditionalRegistries());
|
|
988
|
+
context.catalog = catalog;
|
|
989
|
+
return catalog;
|
|
990
|
+
}
|
|
995
991
|
},
|
|
996
992
|
{
|
|
997
993
|
name: "workflow.resolveAdditionalRegistries",
|
|
998
994
|
allowDuringDryRun: true,
|
|
999
|
-
run: async ({ input, context }
|
|
1000
|
-
|
|
1001
|
-
|
|
995
|
+
run: async ({ input, context }) => {
|
|
996
|
+
const catalog = context.catalog;
|
|
997
|
+
if (!catalog) return null;
|
|
1002
998
|
const selections = input.additionalRegistrySelections ?? [];
|
|
1003
999
|
const { resolved, missing } = resolveAdditionalSelections(selections, catalog);
|
|
1004
1000
|
context.resolvedRegistries = resolved;
|
|
@@ -1022,12 +1018,12 @@ var registerAgentAdvancedDefinition = {
|
|
|
1022
1018
|
run: async ({ input, context }) => {
|
|
1023
1019
|
const response = await runCreditAwareRegistration({
|
|
1024
1020
|
payload: context.payload,
|
|
1025
|
-
onShortfall: async (
|
|
1026
|
-
context.lastQuote = summary;
|
|
1021
|
+
onShortfall: async (err) => {
|
|
1022
|
+
context.lastQuote = err.summary;
|
|
1027
1023
|
if (!input.creditTopUp) {
|
|
1028
1024
|
return "abort";
|
|
1029
1025
|
}
|
|
1030
|
-
await purchaseCreditsWithHbar(input.creditTopUp, summary);
|
|
1026
|
+
await purchaseCreditsWithHbar(input.creditTopUp, err.summary);
|
|
1031
1027
|
return "retry";
|
|
1032
1028
|
}
|
|
1033
1029
|
});
|
|
@@ -1047,8 +1043,12 @@ var registerAgentAdvancedDefinition = {
|
|
|
1047
1043
|
if (!context.attemptId) throw new Error("Registration attemptId missing.");
|
|
1048
1044
|
const result = await waitForRegistrationCompletion(context.attemptId);
|
|
1049
1045
|
context.progress = result;
|
|
1050
|
-
if (result
|
|
1051
|
-
|
|
1046
|
+
if (result && typeof result === "object" && "result" in result) {
|
|
1047
|
+
const progress = result;
|
|
1048
|
+
const maybeUaid = progress.result?.uaid;
|
|
1049
|
+
if (typeof maybeUaid === "string") {
|
|
1050
|
+
context.uaid = maybeUaid;
|
|
1051
|
+
}
|
|
1052
1052
|
}
|
|
1053
1053
|
return result;
|
|
1054
1054
|
}
|
|
@@ -1072,6 +1072,9 @@ var registerAgentAdvancedDefinition = {
|
|
|
1072
1072
|
};
|
|
1073
1073
|
var registerAgentAdvancedPipeline = scaffoldWorkflow(registerAgentAdvancedDefinition);
|
|
1074
1074
|
function resolveAdditionalSelections(selections, catalog) {
|
|
1075
|
+
if (!catalog.registries || catalog.registries.length === 0) {
|
|
1076
|
+
return { resolved: [], missing: selections };
|
|
1077
|
+
}
|
|
1075
1078
|
const resolved = /* @__PURE__ */ new Set();
|
|
1076
1079
|
const missing = [];
|
|
1077
1080
|
for (const selection of selections) {
|
|
@@ -1088,13 +1091,20 @@ function collectMatches(selection, catalog) {
|
|
|
1088
1091
|
const target = selection.trim().toLowerCase();
|
|
1089
1092
|
if (!target) return [];
|
|
1090
1093
|
const matches = [];
|
|
1091
|
-
for (const registry of catalog.registries) {
|
|
1092
|
-
const registryId = registry.id
|
|
1094
|
+
for (const registry of catalog.registries ?? []) {
|
|
1095
|
+
const registryId = registry.id?.toLowerCase();
|
|
1096
|
+
const networks = registry.networks ?? [];
|
|
1097
|
+
if (!registryId || networks.length === 0) continue;
|
|
1093
1098
|
if (registryId === target) {
|
|
1094
|
-
|
|
1099
|
+
networks.forEach((network) => {
|
|
1100
|
+
if (network?.key) {
|
|
1101
|
+
matches.push(network.key);
|
|
1102
|
+
}
|
|
1103
|
+
});
|
|
1095
1104
|
continue;
|
|
1096
1105
|
}
|
|
1097
|
-
for (const network of
|
|
1106
|
+
for (const network of networks) {
|
|
1107
|
+
if (!network?.key) continue;
|
|
1098
1108
|
const keyLower = network.key.toLowerCase();
|
|
1099
1109
|
const networkIdLower = network.networkId?.toLowerCase();
|
|
1100
1110
|
const labelLower = network.label?.toLowerCase();
|
|
@@ -1133,13 +1143,22 @@ var registerAgentErc8004Definition = {
|
|
|
1133
1143
|
{
|
|
1134
1144
|
name: "hol.getAdditionalRegistries",
|
|
1135
1145
|
allowDuringDryRun: true,
|
|
1136
|
-
run: async (
|
|
1146
|
+
run: async ({ context }) => {
|
|
1147
|
+
const catalog = await withBroker((client) => client.getAdditionalRegistries());
|
|
1148
|
+
context.catalog = catalog;
|
|
1149
|
+
return catalog;
|
|
1150
|
+
}
|
|
1137
1151
|
},
|
|
1138
1152
|
{
|
|
1139
1153
|
name: "workflow.erc8004.resolveNetworks",
|
|
1140
1154
|
allowDuringDryRun: true,
|
|
1141
|
-
run: async ({ input, context }
|
|
1142
|
-
const response = catalog;
|
|
1155
|
+
run: async ({ input, context }) => {
|
|
1156
|
+
const response = context.catalog;
|
|
1157
|
+
if (!response) {
|
|
1158
|
+
context.resolvedNetworks = [];
|
|
1159
|
+
context.missingNetworks = [];
|
|
1160
|
+
return { resolved: [], missing: [] };
|
|
1161
|
+
}
|
|
1143
1162
|
const selections = input.erc8004Networks?.length ? input.erc8004Networks : defaultErc8004Selections(response);
|
|
1144
1163
|
const { resolved, missing } = resolveErc8004Selections(selections, response);
|
|
1145
1164
|
context.resolvedNetworks = resolved;
|
|
@@ -1171,18 +1190,26 @@ var registerAgentErc8004Definition = {
|
|
|
1171
1190
|
};
|
|
1172
1191
|
var registerAgentErc8004Pipeline = scaffoldWorkflow(registerAgentErc8004Definition);
|
|
1173
1192
|
function resolveErc8004Selections(selections, catalog) {
|
|
1193
|
+
if (!catalog.registries || catalog.registries.length === 0) {
|
|
1194
|
+
return { resolved: [], missing: selections };
|
|
1195
|
+
}
|
|
1174
1196
|
const resolved = /* @__PURE__ */ new Set();
|
|
1175
1197
|
const missing = [];
|
|
1176
1198
|
selections.forEach((entry) => {
|
|
1177
1199
|
const normalized2 = entry.trim().toLowerCase();
|
|
1178
1200
|
if (!normalized2) return;
|
|
1179
1201
|
let matched = false;
|
|
1180
|
-
for (const descriptor of catalog.registries) {
|
|
1181
|
-
|
|
1182
|
-
|
|
1202
|
+
for (const descriptor of catalog.registries ?? []) {
|
|
1203
|
+
const descriptorId = descriptor.id?.toLowerCase();
|
|
1204
|
+
const networks = descriptor.networks ?? [];
|
|
1205
|
+
if (!descriptorId || !descriptorId.startsWith("erc-8004")) continue;
|
|
1206
|
+
for (const network of networks) {
|
|
1207
|
+
if (!network) continue;
|
|
1183
1208
|
const candidates = [network.key, network.networkId, network.label, network.name].map((value) => value?.toLowerCase().trim()).filter(Boolean);
|
|
1184
|
-
if (candidates.includes(normalized2) || `${
|
|
1185
|
-
|
|
1209
|
+
if (candidates.includes(normalized2) || `${descriptorId}:${network.networkId?.toLowerCase()}` === normalized2) {
|
|
1210
|
+
if (network.key) {
|
|
1211
|
+
resolved.add(network.key);
|
|
1212
|
+
}
|
|
1186
1213
|
matched = true;
|
|
1187
1214
|
}
|
|
1188
1215
|
}
|
|
@@ -1194,9 +1221,9 @@ function resolveErc8004Selections(selections, catalog) {
|
|
|
1194
1221
|
return { resolved: Array.from(resolved), missing };
|
|
1195
1222
|
}
|
|
1196
1223
|
function defaultErc8004Selections(catalog) {
|
|
1197
|
-
const defaults = catalog.registries
|
|
1198
|
-
if (!defaults) return [];
|
|
1199
|
-
return defaults.networks.map((network) => network.key);
|
|
1224
|
+
const defaults = catalog.registries?.find((entry) => entry.id?.toLowerCase() === "erc-8004");
|
|
1225
|
+
if (!defaults || !defaults.networks) return [];
|
|
1226
|
+
return defaults.networks.map((network) => network?.key).filter((key) => Boolean(key));
|
|
1200
1227
|
}
|
|
1201
1228
|
function withAdditionalRegistries(payload, networks) {
|
|
1202
1229
|
if (networks.length === 0) return payload;
|
|
@@ -1355,24 +1382,20 @@ var agentAuthSchema = z3.object({
|
|
|
1355
1382
|
headers: z3.record(z3.string(), z3.string()).optional()
|
|
1356
1383
|
}).partial();
|
|
1357
1384
|
var chatSessionSchema = z3.object({
|
|
1358
|
-
uaid: z3.string().min(1)
|
|
1359
|
-
agentUrl: z3.string().url().optional(),
|
|
1385
|
+
uaid: z3.string().min(1),
|
|
1360
1386
|
historyTtlSeconds: z3.number().int().positive().optional(),
|
|
1361
|
-
auth: agentAuthSchema.optional()
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
ctx.addIssue({ code: z3.ZodIssueCode.custom, message: "uaid is required (agentUrl is supported for legacy direct calls)" });
|
|
1365
|
-
}
|
|
1387
|
+
auth: agentAuthSchema.optional(),
|
|
1388
|
+
senderUaid: z3.string().min(1).optional(),
|
|
1389
|
+
encryptionRequested: z3.boolean().optional()
|
|
1366
1390
|
});
|
|
1367
1391
|
var chatMessageSchema = z3.object({
|
|
1368
1392
|
sessionId: z3.string().min(1).optional(),
|
|
1369
1393
|
uaid: z3.string().min(1).optional(),
|
|
1370
|
-
agentUrl: z3.string().url().optional(),
|
|
1371
1394
|
message: z3.string().min(1),
|
|
1372
1395
|
streaming: z3.boolean().optional(),
|
|
1373
1396
|
auth: agentAuthSchema.optional()
|
|
1374
1397
|
}).superRefine((value, ctx) => {
|
|
1375
|
-
if (!value.sessionId && !value.uaid
|
|
1398
|
+
if (!value.sessionId && !value.uaid) {
|
|
1376
1399
|
ctx.addIssue({ code: z3.ZodIssueCode.custom, message: "Provide sessionId for existing chats or uaid to start a new one." });
|
|
1377
1400
|
}
|
|
1378
1401
|
});
|
|
@@ -1419,6 +1442,49 @@ var workflowFullInput = z3.object({
|
|
|
1419
1442
|
discoveryQuery: z3.string().optional(),
|
|
1420
1443
|
chatMessage: z3.string().optional()
|
|
1421
1444
|
});
|
|
1445
|
+
var openRouterChatToolSchema = z3.object({
|
|
1446
|
+
modelId: z3.string().min(1),
|
|
1447
|
+
registry: z3.string().optional(),
|
|
1448
|
+
message: z3.string(),
|
|
1449
|
+
authToken: z3.string().optional()
|
|
1450
|
+
});
|
|
1451
|
+
var registryShowcaseToolSchema = z3.object({
|
|
1452
|
+
query: z3.string().optional(),
|
|
1453
|
+
uaid: z3.string().optional(),
|
|
1454
|
+
message: z3.string().optional(),
|
|
1455
|
+
performCreditCheck: z3.boolean().optional()
|
|
1456
|
+
});
|
|
1457
|
+
var erc8004DiscoveryToolSchema = z3.object({ query: z3.string().optional(), limit: z3.number().int().positive().optional() });
|
|
1458
|
+
var bridgePayloadSchema = z3.object({
|
|
1459
|
+
uaid: z3.string().min(1),
|
|
1460
|
+
agentverseUaid: z3.string().min(1),
|
|
1461
|
+
localMessage: z3.string().min(1),
|
|
1462
|
+
agentverseMessage: z3.string().min(1),
|
|
1463
|
+
iterations: z3.number().int().positive().optional()
|
|
1464
|
+
});
|
|
1465
|
+
var erc8004X402ToolSchema = z3.object({
|
|
1466
|
+
payload: agentRegistrationSchema,
|
|
1467
|
+
erc8004Networks: z3.array(z3.string()).optional(),
|
|
1468
|
+
chatMessage: z3.string().optional()
|
|
1469
|
+
});
|
|
1470
|
+
var x402RegistrationToolSchema = z3.object({
|
|
1471
|
+
payload: agentRegistrationSchema,
|
|
1472
|
+
x402: z3.object({
|
|
1473
|
+
accountId: z3.string().min(1),
|
|
1474
|
+
credits: z3.number().positive(),
|
|
1475
|
+
evmPrivateKey: z3.string().min(1),
|
|
1476
|
+
ledgerVerification: z3.object({
|
|
1477
|
+
challengeId: z3.string().min(1),
|
|
1478
|
+
accountId: z3.string().min(1),
|
|
1479
|
+
network: z3.enum(["mainnet", "testnet"]),
|
|
1480
|
+
signature: z3.string().min(1),
|
|
1481
|
+
signatureKind: z3.enum(["raw", "map"]).optional(),
|
|
1482
|
+
publicKey: z3.string().optional(),
|
|
1483
|
+
expiresInMinutes: z3.number().int().positive().optional()
|
|
1484
|
+
}).optional()
|
|
1485
|
+
}),
|
|
1486
|
+
chatMessage: z3.string().optional()
|
|
1487
|
+
});
|
|
1422
1488
|
var waitForRegistrationInput = z3.object({
|
|
1423
1489
|
attemptId: z3.string(),
|
|
1424
1490
|
intervalMs: z3.number().int().positive().default(2e3),
|
|
@@ -1476,7 +1542,6 @@ var buyX402Input = z3.object({
|
|
|
1476
1542
|
var mcp = new FastMCP({
|
|
1477
1543
|
name: "hashgraph-standards",
|
|
1478
1544
|
version: "1.0.0",
|
|
1479
|
-
description: "MCP tools exposing Hashgraph Online Registry Broker via standards-sdk",
|
|
1480
1545
|
instructions: connectionInstructions,
|
|
1481
1546
|
// Route FastMCP logging to our pino logger (stderr) to keep stdio transport clean.
|
|
1482
1547
|
logger: {
|
|
@@ -1487,7 +1552,7 @@ var mcp = new FastMCP({
|
|
|
1487
1552
|
log: (...args) => logger.info(args)
|
|
1488
1553
|
}
|
|
1489
1554
|
});
|
|
1490
|
-
var
|
|
1555
|
+
var rawToolDefinitions = [
|
|
1491
1556
|
{
|
|
1492
1557
|
name: "hol.search",
|
|
1493
1558
|
description: "Keyword search for agents or MCP servers with filtering controls.",
|
|
@@ -1572,27 +1637,26 @@ var toolDefinitions = [
|
|
|
1572
1637
|
description: "Send a message to an active chat session.",
|
|
1573
1638
|
schema: chatMessageSchema,
|
|
1574
1639
|
handler: (input) => withBroker(async (client) => {
|
|
1575
|
-
|
|
1576
|
-
|
|
1640
|
+
const { sessionId, uaid, message, auth, streaming } = input;
|
|
1641
|
+
if (sessionId) {
|
|
1642
|
+
const payload2 = { sessionId, message, auth, streaming };
|
|
1643
|
+
return client.chat.sendMessage(payload2);
|
|
1577
1644
|
}
|
|
1578
|
-
const uaid = input.uaid;
|
|
1579
1645
|
if (!uaid) {
|
|
1580
1646
|
throw new Error("sessionId missing; provide uaid so a session can be created before sending.");
|
|
1581
1647
|
}
|
|
1582
|
-
const session = await client.chat.createSession({
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
});
|
|
1586
|
-
const sessionId = session.sessionId ?? session.id;
|
|
1587
|
-
if (!sessionId) {
|
|
1648
|
+
const session = await client.chat.createSession({ uaid, auth });
|
|
1649
|
+
const derivedSessionId = session.sessionId;
|
|
1650
|
+
if (!derivedSessionId) {
|
|
1588
1651
|
throw new Error("Unable to determine sessionId from broker response when auto-creating chat session.");
|
|
1589
1652
|
}
|
|
1590
|
-
|
|
1591
|
-
sessionId,
|
|
1592
|
-
message
|
|
1593
|
-
auth
|
|
1594
|
-
streaming
|
|
1595
|
-
}
|
|
1653
|
+
const payload = {
|
|
1654
|
+
sessionId: derivedSessionId,
|
|
1655
|
+
message,
|
|
1656
|
+
auth,
|
|
1657
|
+
streaming
|
|
1658
|
+
};
|
|
1659
|
+
return client.chat.sendMessage(payload);
|
|
1596
1660
|
}, "hol.chat.sendMessage")
|
|
1597
1661
|
},
|
|
1598
1662
|
{
|
|
@@ -1724,50 +1788,37 @@ var toolDefinitions = [
|
|
|
1724
1788
|
{
|
|
1725
1789
|
name: "workflow.openrouterChat",
|
|
1726
1790
|
description: "Pipeline: discover OpenRouter model and run a chat message",
|
|
1727
|
-
schema:
|
|
1791
|
+
schema: openRouterChatToolSchema,
|
|
1728
1792
|
handler: async (input) => formatPipelineResult(await openRouterChatWorkflow.run(input))
|
|
1729
1793
|
},
|
|
1730
1794
|
{
|
|
1731
1795
|
name: "workflow.registryBrokerShowcase",
|
|
1732
1796
|
description: "Pipeline: discovery, analytics, UAID validation, chat",
|
|
1733
|
-
schema:
|
|
1797
|
+
schema: registryShowcaseToolSchema,
|
|
1734
1798
|
handler: async (input) => formatPipelineResult(await registryBrokerShowcaseWorkflow.run(input))
|
|
1735
1799
|
},
|
|
1736
1800
|
{
|
|
1737
1801
|
name: "workflow.agentverseBridge",
|
|
1738
1802
|
description: "Pipeline: relay chat between local UAID and Agentverse UAID",
|
|
1739
|
-
schema:
|
|
1740
|
-
uaid: z3.string().min(1),
|
|
1741
|
-
agentverseUaid: z3.string().min(1),
|
|
1742
|
-
localMessage: z3.string().min(1),
|
|
1743
|
-
agentverseMessage: z3.string().min(1),
|
|
1744
|
-
iterations: z3.number().int().positive().optional()
|
|
1745
|
-
}),
|
|
1803
|
+
schema: bridgePayloadSchema,
|
|
1746
1804
|
handler: async (input) => formatPipelineResult(await agentverseBridgeWorkflow.run(input))
|
|
1747
1805
|
},
|
|
1748
1806
|
{
|
|
1749
1807
|
name: "workflow.erc8004Discovery",
|
|
1750
1808
|
description: "Pipeline: search ERC-8004 registries",
|
|
1751
|
-
schema:
|
|
1809
|
+
schema: erc8004DiscoveryToolSchema,
|
|
1752
1810
|
handler: async (input) => formatPipelineResult(await erc8004DiscoveryWorkflow.run(input))
|
|
1753
1811
|
},
|
|
1754
1812
|
{
|
|
1755
1813
|
name: "workflow.erc8004X402",
|
|
1756
1814
|
description: "Pipeline: ERC-8004 registration funded via X402 credits",
|
|
1757
|
-
schema:
|
|
1758
|
-
payload: agentRegistrationSchema,
|
|
1759
|
-
erc8004Networks: z3.array(z3.string()).optional(),
|
|
1760
|
-
chatMessage: z3.string().optional()
|
|
1761
|
-
}),
|
|
1815
|
+
schema: erc8004X402ToolSchema,
|
|
1762
1816
|
handler: async (input) => formatPipelineResult(await erc8004X402Workflow.run(input))
|
|
1763
1817
|
},
|
|
1764
1818
|
{
|
|
1765
1819
|
name: "workflow.x402Registration",
|
|
1766
1820
|
description: "Pipeline: register agent using X402 payments + chat smoke test",
|
|
1767
|
-
schema:
|
|
1768
|
-
payload: agentRegistrationSchema,
|
|
1769
|
-
chatMessage: z3.string().optional()
|
|
1770
|
-
}),
|
|
1821
|
+
schema: x402RegistrationToolSchema,
|
|
1771
1822
|
handler: async (input) => formatPipelineResult(await x402RegistrationWorkflow.run(input))
|
|
1772
1823
|
},
|
|
1773
1824
|
{
|
|
@@ -1777,11 +1828,14 @@ var toolDefinitions = [
|
|
|
1777
1828
|
handler: async (input) => formatPipelineResult(await fullWorkflowPipeline.run(input))
|
|
1778
1829
|
}
|
|
1779
1830
|
];
|
|
1831
|
+
var toolDefinitions = rawToolDefinitions;
|
|
1780
1832
|
function formatPipelineResult(result) {
|
|
1833
|
+
const contextRecord = result.context && typeof result.context === "object" ? result.context : {};
|
|
1834
|
+
const contextUaid = typeof contextRecord.uaid === "string" ? contextRecord.uaid : void 0;
|
|
1781
1835
|
const summaryLines = [
|
|
1782
1836
|
`Workflow: ${result.pipeline}`,
|
|
1783
1837
|
result.dryRun ? "(dry-run)" : void 0,
|
|
1784
|
-
|
|
1838
|
+
contextUaid ? `UAID: ${contextUaid}` : void 0,
|
|
1785
1839
|
`Steps executed: ${result.steps.length}`
|
|
1786
1840
|
].filter(Boolean);
|
|
1787
1841
|
return {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/transports/index.ts","../src/mcp.ts","../src/broker.ts","../src/config.ts","../src/logger.ts","../src/schemas/agent.ts","../src/workflows/env.ts","../src/workflows/pipeline.ts","../src/workflows/registry.ts","../src/workflows/discovery.ts","../src/workflows/utils/credits.ts","../src/workflows/errors.ts","../src/workflows/registration.ts","../src/workflows/chat.ts","../src/workflows/ops.ts","../src/workflows/combined.ts","../src/workflows/scaffold.ts","../src/workflows/openrouter-chat.ts","../src/workflows/registry-showcase.ts","../src/workflows/agentverse-bridge.ts","../src/workflows/erc8004-discovery.ts","../src/workflows/register-advanced.ts","../src/workflows/register-erc8004.ts","../src/workflows/x402-topup.ts","../src/workflows/erc8004-x402.ts","../src/workflows/x402-registration.ts","../src/index.ts"],"sourcesContent":["import http, { IncomingMessage, ServerResponse } from 'node:http';\nimport { randomUUID } from 'node:crypto';\nimport { PassThrough } from 'node:stream';\nimport { mcp, registeredTools } from '../mcp';\nimport { config } from '../config';\nimport { logger } from '../logger';\n\nconst LOOPBACK = '127.0.0.1';\n\nexport async function runStdio() {\n logger.info('Starting stdio transport');\n await mcp.start({ transportType: 'stdio' });\n logger.info('Stdio transport started');\n}\n\nexport async function runSSE() {\n const upstreamPort = config.httpStreamPort ?? config.port + 1;\n await startHttpStreamBackend(upstreamPort);\n\n const gateway = createGatewayServer(upstreamPort);\n await new Promise<void>((resolve, reject) => {\n gateway.once('error', reject);\n gateway.listen(config.port, () => {\n logger.info({ port: config.port, upstreamPort }, 'Gateway listening');\n resolve();\n });\n });\n}\n\nasync function startHttpStreamBackend(port: number) {\n await mcp.start({\n transportType: 'httpStream',\n httpStream: {\n port,\n host: LOOPBACK,\n endpoint: '/mcp/stream',\n enableJsonResponse: false,\n },\n });\n logger.info({ port }, 'HTTP stream backend ready');\n}\n\nexport function createGatewayServer(upstreamPort: number) {\n return http.createServer(createGatewayHandler(upstreamPort));\n}\n\nexport function createGatewayHandler(upstreamPort: number) {\n return (req: IncomingMessage, res: ServerResponse) => {\n if (!req.url) {\n res.writeHead(400).end('Missing URL');\n return;\n }\n if (req.url.startsWith('/healthz')) {\n const body = JSON.stringify({\n status: 'ok',\n uptime: process.uptime(),\n tools: registeredTools.length,\n requestId: randomUUID(),\n });\n res.writeHead(200, { 'content-type': 'application/json' });\n res.end(body);\n return;\n }\n proxyRequest(req, res, upstreamPort);\n };\n}\n\nfunction proxyRequest(req: IncomingMessage, res: ServerResponse, upstreamPort: number) {\n logger.debug({ method: req.method, url: req.url }, 'gateway.forward');\n const proxyReq = http.request(\n {\n hostname: LOOPBACK,\n port: upstreamPort,\n method: req.method,\n path: req.url,\n headers: {\n ...req.headers,\n host: `${LOOPBACK}:${upstreamPort}`,\n },\n },\n (proxyRes) => {\n res.writeHead(proxyRes.statusCode ?? 502, proxyRes.headers);\n proxyRes.pipe(res);\n },\n );\n\n proxyReq.on('error', (error) => {\n logger.error({ error }, 'proxy.error');\n if (!res.headersSent) {\n res.writeHead(502);\n }\n res.end('Upstream error');\n });\n\n if (req.method && ['POST', 'PUT', 'PATCH'].includes(req.method)) {\n const tee = new PassThrough();\n let preview = '';\n tee.on('data', (chunk) => {\n if (preview.length < 512) {\n preview += chunk.toString();\n }\n });\n tee.on('end', () => {\n if (preview.length) {\n logger.debug({ preview: preview.slice(0, 512) }, 'proxy.preview');\n }\n });\n req.pipe(tee).pipe(proxyReq);\n } else {\n req.pipe(proxyReq);\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport {\n AgentAuthConfig,\n LedgerChallengeRequest,\n LedgerVerifyRequest,\n PurchaseCreditsWithHbarParams,\n RegistryBrokerClient,\n RegistryBrokerError,\n} from '@hashgraphonline/standards-sdk';\nimport { FastMCP } from 'fastmcp';\nimport type { Context, Content } from 'fastmcp';\nimport { z } from 'zod';\nimport { getCreditBalance, withBroker } from './broker';\nimport { config } from './config';\nimport { logger } from './logger';\nimport { agentRegistrationSchema } from './schemas/agent';\nimport { discoveryPipeline } from './workflows/discovery';\nimport { registrationPipeline } from './workflows/registration';\nimport { chatPipeline } from './workflows/chat';\nimport { opsPipeline } from './workflows/ops';\nimport { fullWorkflowPipeline } from './workflows/combined';\nimport { openRouterChatWorkflow } from './workflows/openrouter-chat';\nimport { registryBrokerShowcaseWorkflow } from './workflows/registry-showcase';\nimport { agentverseBridgeWorkflow } from './workflows/agentverse-bridge';\nimport { erc8004DiscoveryWorkflow } from './workflows/erc8004-discovery';\nimport { erc8004X402Workflow } from './workflows/erc8004-x402';\nimport { x402RegistrationWorkflow } from './workflows/x402-registration';\nimport type { PipelineRunResult } from './workflows/types';\n\ntype AgentRegistrationRequest = Parameters<RegistryBrokerClient['registerAgent']>[0];\ntype ChatCreateSessionPayload = Parameters<RegistryBrokerClient['chat']['createSession']>[0];\ntype ChatSendMessagePayload = Parameters<RegistryBrokerClient['chat']['sendMessage']>[0];\ntype ChatCompactPayload = Parameters<RegistryBrokerClient['chat']['compactHistory']>[0];\ntype UpdateAgentPayload = Parameters<RegistryBrokerClient['updateAgent']>[1];\ntype RegistrySearchNamespaceArgs = Parameters<RegistryBrokerClient['registrySearchByNamespace']>;\ntype PurchaseHbarPayload = PurchaseCreditsWithHbarParams;\n\nconst connectionInstructions = [\n 'You expose the Hashgraph Online Registry Broker via hol.* primitives and workflow.* pipelines. Prefer workflow.* when possible—they bundle common steps and return a pipeline summary plus full results.',\n 'Discovery: use workflow.discovery (or hol.search / hol.vectorSearch) to find UAIDs/agents/MCP servers; pass q/query and optional filters like capabilities, metadata, or type=ai-agents|mcp-servers.',\n 'Registration: workflow.registerMcp (quote → register → wait) is the default; workflow.fullRegistration adds discovery/chat/ops. hol.registerAgent + hol.waitForRegistrationCompletion are the lower-level primitives.',\n 'Chat: call hol.resolveUaid if the UAID is unverified, then hol.chat.createSession (uaid + optional auth) followed by hol.chat.sendMessage (sessionId or uaid). Use hol.chat.history/compact/end to manage the session.',\n 'Operations: workflow.opsCheck or hol.stats/hol.metricsSummary/hol.dashboardStats show registry health; hol.listProtocols + hol.detectProtocol help route third-party requests.',\n 'Credits: check hol.credits.balance before purchases. Use hol.purchaseCredits.hbar or hol.x402.buyCredits only with explicit user approval (X402 requires an EVM key); hol.x402.minimums provides thresholds.',\n 'Always include UAIDs/sessionIds exactly as given and echo any auth headers/tokens the user supplies. If required fields are missing (UAID, payload, accountId), ask for them before calling tools.',\n 'Additional help resources: help://rb/search documents hol.search filters; help://hol/usage lists common recipes.',\n].join('\\n');\n\nconst agentAuthSchema: z.ZodType<AgentAuthConfig> = z\n .object({\n type: z.enum(['bearer', 'basic', 'header', 'apiKey']).optional(),\n token: z.string().optional(),\n username: z.string().optional(),\n password: z.string().optional(),\n headerName: z.string().optional(),\n headerValue: z.string().optional(),\n headers: z.record(z.string(), z.string()).optional(),\n })\n .partial() as z.ZodType<AgentAuthConfig>;\n\nconst chatSessionSchema: z.ZodType<ChatCreateSessionPayload> = z\n .object({\n uaid: z.string().min(1).optional(),\n agentUrl: z.string().url().optional(),\n historyTtlSeconds: z.number().int().positive().optional(),\n auth: agentAuthSchema.optional(),\n })\n .superRefine((value, ctx) => {\n if (!value.uaid && !value.agentUrl) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'uaid is required (agentUrl is supported for legacy direct calls)' });\n }\n }) as z.ZodType<ChatCreateSessionPayload>;\n\nconst chatMessageSchema: z.ZodType<ChatSendMessagePayload> = z\n .object({\n sessionId: z.string().min(1).optional(),\n uaid: z.string().min(1).optional(),\n agentUrl: z.string().url().optional(),\n message: z.string().min(1),\n streaming: z.boolean().optional(),\n auth: agentAuthSchema.optional(),\n })\n .superRefine((value, ctx) => {\n if (!value.sessionId && !value.uaid && !value.agentUrl) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'Provide sessionId for existing chats or uaid to start a new one.' });\n }\n }) as z.ZodType<ChatSendMessagePayload>;\n\nconst chatCompactSchema: z.ZodType<ChatCompactPayload> = z.object({\n sessionId: z.string().min(1),\n preserveEntries: z.number().int().min(0).default(4),\n auth: agentAuthSchema.optional(),\n}) as z.ZodType<ChatCompactPayload>;\n\nconst searchInput = z.object({\n q: z.string().optional(),\n limit: z.number().int().min(1).max(50).default(10),\n capabilities: z.array(z.string()).optional(),\n registries: z.array(z.string()).optional(),\n minTrust: z.number().int().min(0).max(100).optional(),\n verified: z.boolean().optional(),\n online: z.boolean().optional(),\n sortBy: z.enum(['trust', 'latency', 'most-recent']).optional(),\n sortOrder: z.enum(['asc', 'desc']).optional(),\n metadata: z.record(z.string(), z.array(z.string())).optional(),\n type: z.enum(['ai-agents', 'mcp-servers']).optional(),\n});\n\nconst vectorSearchInput = z.object({\n query: z.string().min(1),\n limit: z.number().int().min(1).max(20).default(5),\n});\n\nconst uaidInput = z.object({ uaid: z.string().min(1) });\n\nconst registrationPayload = z.object({\n payload: agentRegistrationSchema,\n});\n\nconst workflowDiscoveryInput = z.object({\n query: z.string().optional(),\n limit: z.number().int().min(1).max(50).optional(),\n});\n\nconst workflowRegistrationInput = z.object({\n payload: agentRegistrationSchema,\n});\n\nconst workflowChatInput = z.object({\n uaid: z.string().min(1),\n message: z.string().optional(),\n});\n\nconst workflowOpsInput = z.object({});\n\nconst workflowFullInput = z.object({\n registrationPayload: agentRegistrationSchema,\n discoveryQuery: z.string().optional(),\n chatMessage: z.string().optional(),\n});\n\nconst waitForRegistrationInput = z.object({\n attemptId: z.string(),\n intervalMs: z.number().int().positive().default(2_000),\n timeoutMs: z.number().int().positive().default(5 * 60 * 1000),\n});\n\nconst detectProtocolInput = z.object({\n headers: z.record(z.string(), z.string()),\n body: z.string().optional(),\n});\n\nconst sessionIdInput = z.object({ sessionId: z.string().min(1) });\n\nconst emptyObject = z.object({});\n\nconst updateAgentInput = z.object({\n uaid: z.string().min(1),\n payload: agentRegistrationSchema,\n});\n\nconst registryNamespaceInput = z.object({\n registry: z.string().min(1),\n query: z.string().optional(),\n});\n\nconst creditBalanceInput = z.object({\n hederaAccountId: z.string().min(1).optional(),\n x402AccountId: z.string().min(1).optional(),\n});\n\nconst ledgerNetworkEnum = z.enum(['mainnet', 'testnet']);\n\nconst ledgerChallengeInput = z.object({\n accountId: z.string().min(1),\n network: ledgerNetworkEnum,\n});\n\nconst ledgerVerifyInput = z.object({\n challengeId: z.string().min(1),\n accountId: z.string().min(1),\n network: ledgerNetworkEnum,\n signature: z.string().min(1),\n signatureKind: z.enum(['raw', 'map']).optional(),\n publicKey: z.string().optional(),\n expiresInMinutes: z.number().int().positive().optional(),\n});\n\nconst purchaseHbarInput: z.ZodType<PurchaseHbarPayload> = z.object({\n accountId: z.string().min(1),\n privateKey: z.string().min(1),\n hbarAmount: z.number().positive(),\n memo: z.string().optional(),\n metadata: z.record(z.string(), z.any()).optional(),\n}) as z.ZodType<PurchaseHbarPayload>;\n\nconst buyX402Input = z.object({\n accountId: z.string().min(1),\n credits: z.number().positive(),\n usdAmount: z.number().positive().optional(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.any()).optional(),\n evmPrivateKey: z.string().min(1),\n network: z.enum(['base', 'base-sepolia']).optional(),\n rpcUrl: z.string().url().optional(),\n});\n\nexport const mcp = new FastMCP({\n name: 'hashgraph-standards',\n version: '1.0.0',\n description: 'MCP tools exposing Hashgraph Online Registry Broker via standards-sdk',\n instructions: connectionInstructions,\n // Route FastMCP logging to our pino logger (stderr) to keep stdio transport clean.\n logger: {\n debug: (...args: unknown[]) => logger.debug(args),\n info: (...args: unknown[]) => logger.info(args),\n warn: (...args: unknown[]) => logger.warn(args),\n error: (...args: unknown[]) => logger.error(args),\n log: (...args: unknown[]) => logger.info(args),\n },\n});\n\ntype ToolDefinition<Schema extends z.ZodTypeAny = z.ZodTypeAny> = {\n name: string;\n description: string;\n schema: Schema;\n handler: (input: z.infer<Schema>) => Promise<unknown>;\n};\n\nexport const toolDefinitions: ToolDefinition[] = [\n {\n name: 'hol.search',\n description: 'Keyword search for agents or MCP servers with filtering controls.',\n schema: searchInput,\n handler: (input) => withBroker((client) => client.search(input), 'hol.search'),\n },\n {\n name: 'hol.vectorSearch',\n description: 'Vector similarity search across registered agents.',\n schema: vectorSearchInput,\n handler: (input) => withBroker((client) => client.vectorSearch(input), 'hol.vectorSearch'),\n },\n {\n name: 'hol.resolveUaid',\n description: 'Resolve, validate, and check the status of a UAID in one call.',\n schema: uaidInput,\n handler: ({ uaid }) =>\n withBroker(async (client) => {\n const [resolved, validation, status] = await Promise.all([\n client.resolveUaid(uaid),\n client.validateUaid(uaid),\n client.getUaidConnectionStatus(uaid),\n ]);\n return { resolved, validation, status };\n }, 'hol.resolveUaid'),\n },\n {\n name: 'hol.closeUaidConnection',\n description: 'Force-close any open UAID connection.',\n schema: uaidInput,\n handler: ({ uaid }) => withBroker((client) => client.closeUaidConnection(uaid), 'hol.closeUaidConnection'),\n },\n {\n name: 'hol.getRegistrationQuote',\n description: 'Estimate fees for a given agent registration payload.',\n schema: registrationPayload,\n handler: ({ payload }) => withBroker((client) => client.getRegistrationQuote(payload), 'hol.getRegistrationQuote'),\n },\n {\n name: 'hol.registerAgent',\n description: 'Submit an HCS-11-compatible agent registration.',\n schema: registrationPayload,\n handler: ({ payload }) => withBroker((client) => client.registerAgent(payload), 'hol.registerAgent'),\n },\n {\n name: 'hol.waitForRegistrationCompletion',\n description: 'Poll the registry broker until a registration attempt resolves.',\n schema: waitForRegistrationInput,\n handler: ({ attemptId, intervalMs, timeoutMs }) =>\n withBroker((client) =>\n client.waitForRegistrationCompletion(attemptId, {\n intervalMs,\n timeoutMs,\n }),\n 'hol.waitForRegistrationCompletion',\n ),\n },\n {\n name: 'hol.updateAgent',\n description: 'Update an existing agent registration payload.',\n schema: updateAgentInput,\n handler: ({ uaid, payload }) => withBroker((client) => client.updateAgent(uaid, payload as UpdateAgentPayload), 'hol.updateAgent'),\n },\n {\n name: 'hol.additionalRegistries',\n description: 'Retrieve the catalog of additional registries and networks.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.getAdditionalRegistries(), 'hol.additionalRegistries'),\n },\n {\n name: 'hol.registrySearchByNamespace',\n description: 'Search within a specific registry namespace.',\n schema: registryNamespaceInput,\n handler: ({ registry, query }) =>\n withBroker((client) => client.registrySearchByNamespace(registry, query), 'hol.registrySearchByNamespace'),\n },\n {\n name: 'hol.chat.createSession',\n description: 'Open a chat session linked to a UAID.',\n schema: chatSessionSchema,\n handler: (input) => withBroker((client) => client.chat.createSession(input), 'hol.chat.createSession'),\n },\n {\n name: 'hol.chat.sendMessage',\n description: 'Send a message to an active chat session.',\n schema: chatMessageSchema,\n handler: (input) =>\n withBroker(async (client) => {\n if (input.sessionId) {\n return client.chat.sendMessage(input);\n }\n\n const uaid = (input as any).uaid;\n if (!uaid) {\n throw new Error('sessionId missing; provide uaid so a session can be created before sending.');\n }\n\n // Auto-create a session when callers only supply a UAID.\n const session = await client.chat.createSession({\n uaid,\n auth: input.auth,\n } as any);\n const sessionId = (session as any).sessionId ?? (session as any).id;\n if (!sessionId) {\n throw new Error('Unable to determine sessionId from broker response when auto-creating chat session.');\n }\n\n return client.chat.sendMessage({\n sessionId,\n message: input.message,\n auth: input.auth,\n streaming: input.streaming,\n } as any);\n }, 'hol.chat.sendMessage'),\n },\n {\n name: 'hol.chat.history',\n description: 'Retrieve the message history for a chat session.',\n schema: sessionIdInput,\n handler: ({ sessionId }) => withBroker((client) => client.chat.getHistory(sessionId), 'hol.chat.history'),\n },\n {\n name: 'hol.chat.compact',\n description: 'Compact chat history while preserving the latest entries.',\n schema: chatCompactSchema,\n handler: (input) => withBroker((client) => client.chat.compactHistory(input), 'hol.chat.compact'),\n },\n {\n name: 'hol.chat.end',\n description: 'End a chat session and release broker resources.',\n schema: sessionIdInput,\n handler: ({ sessionId }) => withBroker((client) => client.chat.endSession(sessionId), 'hol.chat.end'),\n },\n {\n name: 'hol.listProtocols',\n description: 'List all registered protocols/adapters known to the broker.',\n schema: emptyObject,\n handler: () => runBrokerCall('hol.listProtocols', () => withBroker((client) => client.listProtocols(), 'hol.listProtocols')),\n },\n {\n name: 'hol.detectProtocol',\n description: 'Detect the expected protocol for an inbound request payload.',\n schema: detectProtocolInput,\n handler: (input) =>\n runBrokerCall('hol.detectProtocol', () => withBroker((client) => client.detectProtocol(input as any), 'hol.detectProtocol')),\n },\n {\n name: 'hol.stats',\n description: 'High-level registry statistics and usage metrics.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.stats(), 'hol.stats'),\n },\n {\n name: 'hol.metricsSummary',\n description: 'Aggregated broker metrics suitable for dashboards.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.metricsSummary(), 'hol.metricsSummary'),\n },\n {\n name: 'hol.dashboardStats',\n description: 'Detailed dashboard statistics from the broker.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.dashboardStats(), 'hol.dashboardStats'),\n },\n {\n name: 'hol.websocketStats',\n description: 'Retrieve websocket connection counts and throughput.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.websocketStats(), 'hol.websocketStats'),\n },\n {\n name: 'hol.ledger.challenge',\n description: 'Create a ledger challenge message for account verification.',\n schema: ledgerChallengeInput,\n handler: (input) => withBroker((client) => client.createLedgerChallenge(input as LedgerChallengeRequest), 'hol.ledger.challenge'),\n },\n {\n name: 'hol.ledger.authenticate',\n description: 'Verify a signed ledger challenge (sets ledger API key).',\n schema: ledgerVerifyInput,\n handler: (input) => withBroker((client) => client.verifyLedgerChallenge(input as LedgerVerifyRequest), 'hol.ledger.authenticate'),\n },\n {\n name: 'hol.purchaseCredits.hbar',\n description: 'Purchase registry credits using HBAR funds.',\n schema: purchaseHbarInput,\n handler: (input) => withBroker((client) => client.purchaseCreditsWithHbar(input), 'hol.purchaseCredits.hbar'),\n },\n {\n name: 'hol.credits.balance',\n description: 'Fetch credit balances for the current API key and optional Hedera/X402 accounts.',\n schema: creditBalanceInput,\n handler: async (input) => {\n const hederaAccountId = input.hederaAccountId;\n const [apiKeyBalance, hederaBalance, x402Balance] = await Promise.all([\n getCreditBalance(),\n hederaAccountId ? safeBalanceLookup('hedera', hederaAccountId) : Promise.resolve(null),\n input.x402AccountId ? safeBalanceLookup('x402', input.x402AccountId) : Promise.resolve(null),\n ]);\n return {\n apiKey: apiKeyBalance,\n hedera: hederaBalance,\n x402: x402Balance,\n };\n },\n },\n {\n name: 'hol.x402.minimums',\n description: 'Fetch the minimum credit purchase requirements for X402.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.getX402Minimums(), 'hol.x402.minimums'),\n },\n {\n name: 'hol.x402.buyCredits',\n description: 'Buy registry credits via X402 using an EVM private key.',\n schema: buyX402Input,\n handler: (input) => withBroker((client) => client.buyCreditsWithX402(input), 'hol.x402.buyCredits'),\n },\n {\n name: 'workflow.discovery',\n description: 'Pipeline: hol.search + hol.vectorSearch',\n schema: workflowDiscoveryInput,\n handler: async (input) => formatPipelineResult(await discoveryPipeline.run(input)),\n },\n {\n name: 'workflow.registerMcp',\n description: 'Pipeline: get quote, register agent, wait for completion',\n schema: workflowRegistrationInput,\n handler: async ({ payload }) => formatPipelineResult(await registrationPipeline.run({ payload })),\n },\n {\n name: 'workflow.chatSmoke',\n description: 'Pipeline: chat session smoke test for UAID',\n schema: workflowChatInput,\n handler: async (input) => formatPipelineResult(await chatPipeline.run(input)),\n },\n {\n name: 'workflow.opsCheck',\n description: 'Pipeline: stats, metrics, dashboard, protocols',\n schema: workflowOpsInput,\n handler: async () => formatPipelineResult(await opsPipeline.run({})),\n },\n {\n name: 'workflow.openrouterChat',\n description: 'Pipeline: discover OpenRouter model and run a chat message',\n schema: z.object({ modelId: z.string().min(1), registry: z.string().optional(), message: z.string(), authToken: z.string().optional() }),\n handler: async (input) => formatPipelineResult(await openRouterChatWorkflow.run(input)),\n },\n {\n name: 'workflow.registryBrokerShowcase',\n description: 'Pipeline: discovery, analytics, UAID validation, chat',\n schema: z.object({ query: z.string().optional(), uaid: z.string().optional(), message: z.string().optional(), performCreditCheck: z.boolean().optional() }),\n handler: async (input) => formatPipelineResult(await registryBrokerShowcaseWorkflow.run(input)),\n },\n {\n name: 'workflow.agentverseBridge',\n description: 'Pipeline: relay chat between local UAID and Agentverse UAID',\n schema: z.object({\n uaid: z.string().min(1),\n agentverseUaid: z.string().min(1),\n localMessage: z.string().min(1),\n agentverseMessage: z.string().min(1),\n iterations: z.number().int().positive().optional(),\n }),\n handler: async (input) => formatPipelineResult(await agentverseBridgeWorkflow.run(input)),\n },\n {\n name: 'workflow.erc8004Discovery',\n description: 'Pipeline: search ERC-8004 registries',\n schema: z.object({ query: z.string().optional(), limit: z.number().int().positive().optional() }),\n handler: async (input) => formatPipelineResult(await erc8004DiscoveryWorkflow.run(input)),\n },\n {\n name: 'workflow.erc8004X402',\n description: 'Pipeline: ERC-8004 registration funded via X402 credits',\n schema: z.object({\n payload: agentRegistrationSchema,\n erc8004Networks: z.array(z.string()).optional(),\n chatMessage: z.string().optional(),\n }),\n handler: async (input) => formatPipelineResult(await erc8004X402Workflow.run(input)),\n },\n {\n name: 'workflow.x402Registration',\n description: 'Pipeline: register agent using X402 payments + chat smoke test',\n schema: z.object({\n payload: agentRegistrationSchema,\n chatMessage: z.string().optional(),\n }),\n handler: async (input) => formatPipelineResult(await x402RegistrationWorkflow.run(input)),\n },\n {\n name: 'workflow.fullRegistration',\n description: 'Pipeline: discovery → register → chat → ops',\n schema: workflowFullInput,\n handler: async (input) => formatPipelineResult(await fullWorkflowPipeline.run(input)),\n },\n];\n\nfunction formatPipelineResult(result: PipelineRunResult<unknown>) {\n const summaryLines = [\n `Workflow: ${result.pipeline}`,\n result.dryRun ? '(dry-run)' : undefined,\n result.context?.uaid ? `UAID: ${result.context.uaid}` : undefined,\n `Steps executed: ${result.steps.length}`,\n ].filter(Boolean) as string[];\n\n return {\n content: [\n { type: 'text', text: summaryLines.join('\\n') },\n buildObjectContent('pipeline.result', result),\n ],\n };\n}\n\nexport function buildLoggedTool<S extends z.ZodTypeAny>(definition: ToolDefinition<S>) {\n return {\n name: definition.name,\n description: definition.description,\n parameters: definition.schema,\n execute: async (args: z.input<S>, context?: Context) => {\n const requestId = context?.requestId ?? randomUUID();\n const started = Date.now();\n try {\n const parsedInput = definition.schema.parse(args);\n logger.debug({ requestId, tool: definition.name }, 'tool.invoke');\n const result = await definition.handler(parsedInput as z.infer<S>);\n logger.info(\n {\n requestId,\n tool: definition.name,\n durationMs: Date.now() - started,\n },\n 'tool.success',\n );\n return normalizeResult(result);\n } catch (error) {\n logger.error(\n {\n requestId,\n tool: definition.name,\n durationMs: Date.now() - started,\n error: error instanceof Error ? error.message : String(error),\n },\n 'tool.failure',\n );\n throw error;\n }\n },\n };\n}\n\nfor (const definition of toolDefinitions) {\n mcp.addTool(buildLoggedTool(definition));\n}\n\nexport const registeredTools = toolDefinitions;\n\nfunction isContentValue(value: unknown): value is Content {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'type' in (value as Record<string, unknown>) &&\n typeof (value as Record<string, unknown>).type === 'string',\n );\n}\n\nfunction normalizeResult(value: unknown): { content: Content[]; structuredContent?: Record<string, unknown>; isError?: boolean } {\n if (isResultShape(value)) {\n const record = value as Record<string, unknown>;\n return {\n content: normalizeContent(record.content),\n isError: typeof record.isError === 'boolean' ? (record.isError as boolean) : undefined,\n };\n }\n if (isPlainObject(value)) {\n return {\n content: [buildObjectContent('tool.result', value as Record<string, unknown>)],\n };\n }\n return { content: normalizeContent(value) };\n}\n\nfunction normalizeContent(result: unknown): Content[] {\n if (Array.isArray(result) && result.every(isContentValue)) {\n return result;\n }\n if (isContentValue(result)) {\n return [result];\n }\n if (result === undefined || result === null) {\n return [{ type: 'text', text: 'ok' }];\n }\n if (typeof result === 'string' || typeof result === 'number' || typeof result === 'boolean') {\n return [{ type: 'text', text: String(result) }];\n }\n if (isPlainObject(result)) {\n return [buildObjectContent('tool.result', result as Record<string, unknown>)];\n }\n return [{ type: 'text', text: JSON.stringify(result) }];\n}\n\nfunction buildObjectContent(name: string, value: Record<string, unknown>): Content {\n return {\n type: 'text',\n text: `${name}:\\n${JSON.stringify(value, null, 2)}`,\n };\n}\n\nfunction isResultShape(value: unknown): value is { content?: unknown; structuredContent?: unknown; isError?: boolean } {\n return Boolean(value && typeof value === 'object' && ('content' in (value as Record<string, unknown>) || 'structuredContent' in (value as Record<string, unknown>)));\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nasync function runBrokerCall<T>(label: string, fn: () => Promise<T>) {\n try {\n return await fn();\n } catch (error) {\n if (error instanceof RegistryBrokerError) {\n const body = typeof error.body === 'object' ? JSON.stringify(error.body) : String(error.body);\n throw new Error(`${label} failed (${error.status} ${error.statusText ?? ''}): ${body}`);\n }\n throw error;\n }\n}\n\nasync function safeBalanceLookup(label: 'hedera' | 'x402', accountId: string) {\n try {\n return await getCreditBalance(accountId);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { error: `${label} balance unavailable: ${message}`, accountId };\n }\n}\n\nmcp.addResource({\n name: 'hol.search.help',\n uri: 'help://rb/search',\n mimeType: 'text/markdown',\n load: async () => [\n {\n text: [\n '# hol.search',\n '',\n 'Discover registered agents or MCP servers.',\n '',\n '- `q`: keyword search',\n '- `capabilities`: filter by declared skills',\n '- `metadata`: pass `{ \\\"region\\\": [\\\"na\\\"] }` style filters',\n '- `type`: limit results to `ai-agents` or `mcp-servers`',\n ].join('\\n'),\n },\n ],\n});\n\nmcp.addResource({\n name: 'hol.tools.guide',\n uri: 'help://hol/usage',\n mimeType: 'text/markdown',\n load: async () => [\n {\n text: [\n '# Hashnet MCP quick usage',\n '',\n 'Prefer workflow.* pipelines when available—they run multiple broker calls and return both a text summary and structured results:',\n '- Discovery: workflow.discovery { query?, limit? } (or hol.search / hol.vectorSearch).',\n '- Registration: workflow.registerMcp { payload } (quote → register → wait) or workflow.fullRegistration to add discovery/chat/ops.',\n '- Chat: hol.chat.createSession { uaid, auth?, historyTtlSeconds? } → hol.chat.sendMessage { sessionId OR uaid, message, auth?, streaming? } → hol.chat.history/compact/end.',\n '- UAID validation/resets: hol.resolveUaid { uaid }, hol.closeUaidConnection { uaid }.',\n '- Ops/metrics: workflow.opsCheck or hol.stats / hol.metricsSummary / hol.dashboardStats.',\n '- Credits: hol.credits.balance first, then hol.purchaseCredits.hbar or hol.x402.buyCredits (X402 requires evmPrivateKey; call hol.x402.minimums to inspect limits).',\n '- Protocols: hol.listProtocols and hol.detectProtocol when inspecting inbound requests.',\n '',\n 'Ask the user for any missing UAID, registration payload fields, accountId, or auth tokens before calling tools. Keep sessionId/uaid strings verbatim.',\n ].join('\\n'),\n },\n ],\n});\n","import { RegistryBrokerClient, RegistryBrokerError } from '@hashgraphonline/standards-sdk';\nimport Bottleneck from 'bottleneck';\nimport IORedis from 'ioredis';\nimport { fetch as undiciFetch } from 'undici';\nimport { config } from './config';\n\nconst autoTopUpConfig = config.autoTopUpEnabled\n ? {\n accountId: config.hederaAccountId!,\n privateKey: config.hederaPrivateKey!,\n memo: 'mcp-autotopup',\n }\n : undefined;\n\nconst broker = new RegistryBrokerClient({\n baseUrl: config.registryBrokerUrl,\n apiKey: config.registryBrokerApiKey,\n fetchImplementation: undiciFetch,\n registrationAutoTopUp: autoTopUpConfig,\n historyAutoTopUp: autoTopUpConfig,\n});\n\nconst brokerLimiter = createLimiter();\n\nfunction createLimiter() {\n if (!config.rateLimit) return undefined;\n\n const limiterOptions: Bottleneck.ConstructorOptions = {};\n\n if (config.rateLimit.maxConcurrent !== undefined) {\n limiterOptions.maxConcurrent = config.rateLimit.maxConcurrent;\n }\n if (config.rateLimit.minTimeMs !== undefined) {\n limiterOptions.minTime = config.rateLimit.minTimeMs;\n }\n if (config.rateLimit.reservoir !== undefined) {\n limiterOptions.reservoir = config.rateLimit.reservoir;\n }\n if (config.rateLimit.reservoirRefreshAmount !== undefined) {\n limiterOptions.reservoirRefreshAmount = config.rateLimit.reservoirRefreshAmount;\n }\n if (config.rateLimit.reservoirRefreshIntervalMs !== undefined) {\n limiterOptions.reservoirRefreshInterval = config.rateLimit.reservoirRefreshIntervalMs;\n }\n\n if (config.rateLimit.redis?.url) {\n limiterOptions.datastore = 'ioredis';\n limiterOptions.connection = new IORedis(config.rateLimit.redis.url);\n }\n\n if (\n !limiterOptions.maxConcurrent &&\n !limiterOptions.minTime &&\n !limiterOptions.reservoir &&\n !limiterOptions.datastore\n ) {\n return undefined;\n }\n\n return new Bottleneck(limiterOptions);\n}\n\ntype BrokerTask<T> = (client: RegistryBrokerClient) => Promise<T>;\n\nexport async function withBroker<T>(task: BrokerTask<T>, label?: string): Promise<T> {\n const run = async () => {\n const isLocal =\n config.registryBrokerUrl.includes('localhost') ||\n config.registryBrokerUrl.includes('127.0.0.1');\n if (!config.registryBrokerApiKey && !isLocal) {\n throw new Error('REGISTRY_BROKER_API_KEY is required to call the registry broker. Set it in your environment or .env file.');\n }\n try {\n return await task(broker);\n } catch (error) {\n throw formatBrokerError(error, label);\n }\n };\n if (brokerLimiter) {\n return brokerLimiter.schedule(run);\n }\n return run();\n}\n\nexport { broker, brokerLimiter };\n\nexport interface CreditBalanceResponse {\n accountId: string;\n balance: number;\n timestamp: string;\n}\n\nexport async function getCreditBalance(accountId?: string): Promise<CreditBalanceResponse> {\n if (!config.registryBrokerApiKey) {\n throw new Error('REGISTRY_BROKER_API_KEY is required to fetch credit balances.');\n }\n const base = config.registryBrokerUrl.endsWith('/') ? config.registryBrokerUrl : `${config.registryBrokerUrl}/`;\n const url = new URL('credits/balance', base);\n if (accountId) {\n url.searchParams.set('accountId', accountId);\n }\n const headers: Record<string, string> = {\n accept: 'application/json',\n 'x-api-key': config.registryBrokerApiKey,\n };\n const request = async () => {\n const response = await undiciFetch(url, { method: 'GET', headers });\n if (!response.ok) {\n const hint = await safeReadBody(response);\n throw new Error(`Failed to fetch credit balance (${response.status}): ${hint ?? response.statusText}`);\n }\n return (await response.json()) as CreditBalanceResponse;\n };\n if (brokerLimiter) {\n return brokerLimiter.schedule(request);\n }\n return request();\n}\n\nasync function safeReadBody(response: Response) {\n try {\n const text = await response.text();\n return text || undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction formatBrokerError(error: unknown, label?: string): Error {\n if (error instanceof RegistryBrokerError) {\n const body =\n typeof error.body === 'object'\n ? JSON.stringify(error.body)\n : error.body\n ? String(error.body)\n : 'no response body';\n const statusText = error.statusText ? ` ${error.statusText}` : '';\n const prefix = label ? `${label} failed` : 'Registry broker request failed';\n return new Error(`${prefix} (${error.status}${statusText}): ${body}`);\n }\n return error instanceof Error ? error : new Error(String(error));\n}\n","import { config as loadEnv } from 'dotenv';\nimport { z } from 'zod';\n\nif (process.env.NODE_ENV !== 'test') {\n loadEnv({ quiet: true });\n}\n\nconst LOG_LEVELS = ['fatal', 'error', 'warn', 'info', 'debug', 'trace'] as const;\n\nconst envSchema = z\n .object({\n REGISTRY_BROKER_API_URL: z\n .string()\n .url()\n .default('https://registry.hashgraphonline.com/api/v1'),\n REGISTRY_BROKER_API_KEY: z.string().min(1).optional(),\n HEDERA_ACCOUNT_ID: z.string().min(1).optional(),\n HEDERA_PRIVATE_KEY: z.string().min(1).optional(),\n PORT: z.coerce.number().int().positive().default(3333),\n BROKER_MAX_CONCURRENT: z.coerce.number().int().positive().optional(),\n BROKER_MIN_TIME_MS: z.coerce.number().int().nonnegative().optional(),\n BROKER_RESERVOIR: z.coerce.number().int().positive().optional(),\n BROKER_RESERVOIR_REFRESH_INTERVAL_MS: z.coerce.number().int().positive().optional(),\n BROKER_RESERVOIR_REFRESH_AMOUNT: z.coerce.number().int().positive().optional(),\n BROKER_RATE_LIMIT_REDIS_URL: z.string().url().optional(),\n LOG_LEVEL: z.enum(LOG_LEVELS).default('info'),\n WORKFLOW_DRY_RUN: z\n .enum(['0', '1'])\n .optional()\n .transform((value) => value === '1'),\n BROKER_AUTO_TOP_UP: z\n .enum(['0', '1'])\n .optional()\n .transform((value) => value === '1'),\n HTTP_STREAM_PORT: z.coerce.number().int().positive().optional(),\n })\n .superRefine((val, ctx) => {\n const hasAccount = Boolean(val.HEDERA_ACCOUNT_ID);\n const hasKey = Boolean(val.HEDERA_PRIVATE_KEY);\n if (hasAccount !== hasKey) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'HEDERA_ACCOUNT_ID and HEDERA_PRIVATE_KEY must both be set to enable registrationAutoTopUp.',\n });\n }\n });\n\nconst normalized = (value?: string) => {\n if (value === undefined) return undefined;\n const trimmed = value.trim();\n return trimmed.length === 0 ? undefined : trimmed;\n};\n\nconst parsed = envSchema.safeParse({\n REGISTRY_BROKER_API_URL: normalized(process.env.REGISTRY_BROKER_API_URL),\n REGISTRY_BROKER_API_KEY: normalized(process.env.REGISTRY_BROKER_API_KEY),\n HEDERA_ACCOUNT_ID: normalized(process.env.HEDERA_ACCOUNT_ID),\n HEDERA_PRIVATE_KEY: normalized(process.env.HEDERA_PRIVATE_KEY),\n PORT: normalized(process.env.PORT),\n BROKER_MAX_CONCURRENT: normalized(process.env.BROKER_MAX_CONCURRENT),\n BROKER_MIN_TIME_MS: normalized(process.env.BROKER_MIN_TIME_MS),\n BROKER_RESERVOIR: normalized(process.env.BROKER_RESERVOIR),\n BROKER_RESERVOIR_REFRESH_INTERVAL_MS: normalized(process.env.BROKER_RESERVOIR_REFRESH_INTERVAL_MS),\n BROKER_RESERVOIR_REFRESH_AMOUNT: normalized(process.env.BROKER_RESERVOIR_REFRESH_AMOUNT),\n BROKER_RATE_LIMIT_REDIS_URL: normalized(process.env.BROKER_RATE_LIMIT_REDIS_URL),\n LOG_LEVEL: normalized(process.env.LOG_LEVEL),\n WORKFLOW_DRY_RUN: normalized(process.env.WORKFLOW_DRY_RUN),\n BROKER_AUTO_TOP_UP: normalized(process.env.BROKER_AUTO_TOP_UP),\n HTTP_STREAM_PORT: normalized(process.env.HTTP_STREAM_PORT),\n});\n\nif (!parsed.success) {\n throw new Error(`Invalid environment configuration:\\n${parsed.error.toString()}`);\n}\n\nexport const config = {\n registryBrokerUrl: parsed.data.REGISTRY_BROKER_API_URL,\n registryBrokerApiKey: parsed.data.REGISTRY_BROKER_API_KEY,\n hederaAccountId: parsed.data.HEDERA_ACCOUNT_ID,\n hederaPrivateKey: parsed.data.HEDERA_PRIVATE_KEY,\n port: parsed.data.PORT,\n autoTopUpEnabled:\n Boolean(parsed.data.BROKER_AUTO_TOP_UP) && Boolean(parsed.data.HEDERA_ACCOUNT_ID && parsed.data.HEDERA_PRIVATE_KEY),\n rateLimit: (() => {\n const {\n BROKER_MAX_CONCURRENT,\n BROKER_MIN_TIME_MS,\n BROKER_RESERVOIR,\n BROKER_RESERVOIR_REFRESH_AMOUNT,\n BROKER_RESERVOIR_REFRESH_INTERVAL_MS,\n BROKER_RATE_LIMIT_REDIS_URL,\n } = parsed.data;\n const hasLimiter =\n BROKER_MAX_CONCURRENT ||\n BROKER_MIN_TIME_MS ||\n BROKER_RESERVOIR ||\n BROKER_RATE_LIMIT_REDIS_URL;\n if (!hasLimiter) return undefined;\n return {\n maxConcurrent: BROKER_MAX_CONCURRENT,\n minTimeMs: BROKER_MIN_TIME_MS,\n reservoir: BROKER_RESERVOIR,\n reservoirRefreshAmount: BROKER_RESERVOIR_REFRESH_AMOUNT,\n reservoirRefreshIntervalMs: BROKER_RESERVOIR_REFRESH_INTERVAL_MS,\n redis: BROKER_RATE_LIMIT_REDIS_URL\n ? {\n url: BROKER_RATE_LIMIT_REDIS_URL,\n }\n : undefined,\n };\n })(),\n workflowDryRun: parsed.data.WORKFLOW_DRY_RUN ?? false,\n httpStreamPort: parsed.data.HTTP_STREAM_PORT,\n logLevel: parsed.data.LOG_LEVEL,\n};\n\nexport type AppConfig = typeof config;\n","import pino from 'pino';\nimport { config } from './config';\n\n// Log to stderr so stdio MCP transport keeps stdout reserved for protocol traffic.\nexport const logger = pino(\n {\n level: config.logLevel,\n base: undefined,\n },\n pino.destination(2),\n);\n","import { z } from 'zod';\nimport type { AgentRegistrationRequest } from '@hashgraphonline/standards-sdk/dist/es/services/registry-broker/types.js';\n\nconst socialLinkSchema = z.object({\n platform: z.string(),\n handle: z.string(),\n});\n\nconst aiAgentSchema = z.object({\n type: z.union([z.literal(0), z.literal(1)]),\n capabilities: z.array(z.number().int().nonnegative()),\n model: z.string(),\n creator: z.string().optional(),\n});\n\nconst mcpServerSchema = z.object({\n version: z.string(),\n connectionInfo: z.object({\n url: z.string().url(),\n transport: z.enum(['stdio', 'sse']),\n }),\n services: z.array(z.number().int().nonnegative()),\n description: z.string(),\n capabilities: z.array(z.string()).optional(),\n resources: z\n .array(\n z.object({\n name: z.string(),\n description: z.string(),\n }),\n )\n .optional(),\n tools: z\n .array(\n z.object({\n name: z.string(),\n description: z.string(),\n }),\n )\n .optional(),\n maintainer: z.string().optional(),\n repository: z.string().optional(),\n docs: z.string().optional(),\n});\n\nconst baseProfileSchema = z.object({\n version: z.string(),\n type: z.number().int(),\n display_name: z.string(),\n alias: z.string().optional(),\n bio: z.string().optional(),\n socials: z.array(socialLinkSchema).optional(),\n profileImage: z.string().optional(),\n uaid: z.string().optional(),\n properties: z.record(z.string(), z.any()).optional(),\n inboundTopicId: z.string().optional(),\n outboundTopicId: z.string().optional(),\n base_account: z.string().optional(),\n});\n\nexport const agentProfileSchema = baseProfileSchema.extend({\n aiAgent: aiAgentSchema.optional(),\n mcpServer: mcpServerSchema.optional(),\n});\n\nconst metadataSchema = z.object({\n trustScore: z.number().min(0).max(100).optional(),\n verified: z.boolean().optional(),\n avgLatency: z.number().nonnegative().optional(),\n uptime: z.number().min(0).max(100).optional(),\n provider: z.string().optional(),\n category: z.string().optional(),\n adapter: z.string().optional(),\n openConvAICompatible: z.boolean().optional(),\n customFields: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional(),\n});\n\nexport const agentRegistrationSchema: z.ZodType<AgentRegistrationRequest> = z.object({\n profile: agentProfileSchema,\n endpoint: z.string().url().optional(),\n protocol: z.string().optional(),\n communicationProtocol: z.string().optional(),\n registry: z.string().optional(),\n additionalRegistries: z.array(z.string()).optional(),\n metadata: metadataSchema.optional(),\n});\n","import type { Logger } from 'pino';\n\ninterface EnsureEnvOptions {\n logger?: Logger;\n context?: string;\n}\n\nexport function ensureRequiredEnv(requiredEnv: string[] | undefined, options?: EnsureEnvOptions) {\n if (!requiredEnv?.length) return;\n\n const missing = getMissingEnvVars(requiredEnv);\n if (missing.length > 0) {\n options?.logger?.error?.({ missingEnv: missing }, 'workflow.env.missing');\n const label = options?.context ?? 'workflow';\n throw new Error(`Missing required environment variables for ${label}: ${missing.join(', ')}`);\n }\n}\n\nexport function getMissingEnvVars(requiredEnv: string[]): string[] {\n return requiredEnv.filter((variable) => {\n const value = process.env[variable];\n return value === undefined || value.length === 0;\n });\n}\n\nexport function assertEnvVars(requiredEnv: string[], context: string) {\n ensureRequiredEnv(requiredEnv, { context });\n}\n","import { config } from '../config';\nimport { logger as baseLogger } from '../logger';\nimport { ensureRequiredEnv } from './env';\nimport type {\n PipelineDefinition,\n PipelineExecutionOptions,\n PipelineRunResult,\n PipelineStep,\n PipelineStepResult,\n PipelineStepRunArgs,\n} from './types';\n\nexport function createPipeline<TInput, TContext>(definition: PipelineDefinition<TInput, TContext>) {\n async function run(input: TInput, options?: PipelineExecutionOptions<TContext>): Promise<PipelineRunResult<TContext>> {\n const pipelineLogger = baseLogger.child({ pipeline: definition.name });\n const dryRun = options?.dryRun ?? config.workflowDryRun;\n ensureRequiredEnv(definition.requiredEnv, { logger: pipelineLogger, context: definition.name });\n const context = await definition.createContext(input);\n const stepsResults: PipelineStepResult<unknown>[] = [];\n\n for (let index = 0; index < definition.steps.length; index += 1) {\n const step = definition.steps[index] as PipelineStep<TInput, TContext, unknown>;\n const stepLogger = pipelineLogger.child({ step: step.name, index });\n const stepArgs: PipelineStepRunArgs<TInput, TContext> = {\n input,\n context,\n dryRun,\n logger: stepLogger,\n };\n\n const shouldSkip = await shouldSkipStep(step, stepArgs, dryRun);\n const startedAt = Date.now();\n\n if (shouldSkip) {\n stepLogger.info({ dryRun }, 'pipeline.step.skipped');\n stepsResults.push({ name: step.name, durationMs: 0, skipped: true });\n // eslint-disable-next-line no-await-in-loop\n await options?.hooks?.onStepStart?.({ pipeline: definition.name, step: step.name, index, context });\n // eslint-disable-next-line no-await-in-loop\n await options?.hooks?.onStepSuccess?.({ pipeline: definition.name, step: step.name, index, context, output: undefined });\n continue;\n }\n\n pipelineLogger.info({ step: step.name }, 'pipeline.step.start');\n // eslint-disable-next-line no-await-in-loop\n await options?.hooks?.onStepStart?.({ pipeline: definition.name, step: step.name, index, context });\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const output = await step.run(stepArgs);\n const durationMs = Date.now() - startedAt;\n stepLogger.info({ durationMs }, 'pipeline.step.success');\n stepsResults.push({ name: step.name, durationMs, skipped: false, output });\n // eslint-disable-next-line no-await-in-loop\n await options?.hooks?.onStepSuccess?.({ pipeline: definition.name, step: step.name, index, context, output });\n } catch (error) {\n const durationMs = Date.now() - startedAt;\n const message = error instanceof Error ? error.message : String(error);\n stepLogger.error({ durationMs, error: message }, 'pipeline.step.error');\n stepsResults.push({ name: step.name, durationMs, skipped: false, error: message });\n // eslint-disable-next-line no-await-in-loop\n await options?.hooks?.onStepError?.({ pipeline: definition.name, step: step.name, index, context, error });\n throw error;\n }\n }\n\n return {\n pipeline: definition.name,\n context,\n steps: stepsResults,\n dryRun,\n };\n }\n\n return { definition, run };\n}\n\nasync function shouldSkipStep<TInput, TContext>(\n step: PipelineStep<TInput, TContext, unknown>,\n args: PipelineStepRunArgs<TInput, TContext>,\n dryRun: boolean,\n): Promise<boolean> {\n if (dryRun && step.allowDuringDryRun !== true) {\n return true;\n }\n if (step.skip) {\n return Boolean(await step.skip(args));\n }\n return false;\n}\n","import { createPipeline } from './pipeline';\nimport type { PipelineDefinition } from './types';\n\nconst pipelines = new Map<string, ReturnType<typeof createPipeline<any, any>>>();\n\nexport function registerPipeline<TInput, TContext>(definition: PipelineDefinition<TInput, TContext>) {\n const pipeline = createPipeline(definition);\n pipelines.set(definition.name, pipeline);\n return pipeline;\n}\n\nexport function getPipeline(name: string) {\n return pipelines.get(name);\n}\n\nexport function listPipelines() {\n return Array.from(pipelines.values()).map((pipeline) => pipeline.definition);\n}\n","import { registerPipeline } from './registry';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\ninterface DiscoveryInput {\n query?: string;\n limit?: number;\n}\n\ninterface DiscoveryContext {\n results: {\n search?: unknown;\n vector?: unknown;\n };\n}\n\nconst discoveryDefinition: PipelineDefinition<DiscoveryInput, DiscoveryContext> = {\n name: 'workflow.discovery',\n description: 'Run hol.search and hol.vectorSearch to explore agents.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({ results: {} }),\n steps: [\n {\n name: 'hol.search',\n description: 'Keyword search',\n allowDuringDryRun: true,\n run: async ({ input, context }) => {\n const payload = { q: input.query, limit: input.limit ?? 5 };\n const response = await withBroker((client) => client.search(payload));\n context.results.search = response;\n return response;\n },\n },\n {\n name: 'hol.vectorSearch',\n description: 'Vector similarity search',\n allowDuringDryRun: true,\n run: async ({ input, context }) => {\n if (!input.query) {\n return undefined;\n }\n const response = await withBroker((client) => client.vectorSearch({ query: input.query, limit: input.limit ?? 5 }));\n context.results.vector = response;\n return response;\n },\n },\n ],\n};\n\nexport const discoveryPipeline = registerPipeline(discoveryDefinition);\n","import type { AgentRegistrationRequest, RegisterAgentResponse } from '@hashgraphonline/standards-sdk';\nimport { RegistryBrokerError } from '@hashgraphonline/standards-sdk';\nimport { withBroker } from '../../broker';\nimport { InsufficientCreditsError } from '../errors';\n\nexport type ShortfallResolution = 'retry' | 'abort' | void;\n\nexport interface CreditAwareRegistrationOptions {\n payload: AgentRegistrationRequest;\n onShortfall?: (quoteError: InsufficientCreditsError) => Promise<ShortfallResolution> | ShortfallResolution;\n}\n\nexport async function runCreditAwareRegistration({ payload, onShortfall }: CreditAwareRegistrationOptions) {\n while (true) {\n try {\n const response = await withBroker((client) => client.registerAgent(payload));\n return response;\n } catch (error) {\n const converted = await translateCreditError(error, payload);\n if (converted) {\n const action = (await onShortfall?.(converted)) ?? 'abort';\n if (action === 'retry') {\n continue;\n }\n throw converted;\n }\n throw error;\n }\n }\n}\n\nasync function translateCreditError(error: unknown, payload: AgentRegistrationRequest) {\n if (!(error instanceof RegistryBrokerError) || error.status !== 402) {\n return null;\n }\n const quote = await withBroker((client) => client.getRegistrationQuote(payload));\n return new InsufficientCreditsError(quote);\n}\n\nexport async function waitForRegistrationCompletion(attemptId: string) {\n return withBroker((client) =>\n client.waitForRegistrationCompletion(attemptId, {\n intervalMs: 2_000,\n timeoutMs: 5 * 60_000,\n }),\n );\n}\n\nexport async function retryWithFixedDelays<T>(fn: () => Promise<T>, attempts = 3, delayMs = 1_000) {\n let lastError: unknown;\n for (let i = 0; i < attempts; i += 1) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n if (i < attempts - 1) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n }\n throw lastError;\n}\n","import type { RegisterAgentQuoteResponse } from '@hashgraphonline/standards-sdk';\n\nexport interface CreditShortfallSummary {\n requiredCredits: number;\n availableCredits: number;\n shortfallCredits: number;\n estimatedHbar?: number | null;\n creditsPerHbar?: number | null;\n registry?: string;\n protocol?: string;\n accountId?: string | null;\n}\n\nexport class InsufficientCreditsError extends Error {\n readonly code = 'INSUFFICIENT_CREDITS';\n readonly summary: CreditShortfallSummary;\n\n constructor(quote: RegisterAgentQuoteResponse, hint?: string) {\n const shortfall = Math.max(0, quote.shortfallCredits ?? 0);\n const message = hint ?? `Insufficient registry credits (shortfall: ${shortfall})`;\n super(message);\n this.name = 'InsufficientCreditsError';\n this.summary = {\n requiredCredits: quote.requiredCredits,\n availableCredits: quote.availableCredits ?? 0,\n shortfallCredits: shortfall,\n estimatedHbar: quote.estimatedHbar,\n creditsPerHbar: quote.creditsPerHbar,\n registry: quote.registry,\n protocol: quote.protocol,\n accountId: quote.accountId,\n };\n }\n}\n\nexport function isInsufficientCreditsError(error: unknown): error is InsufficientCreditsError {\n return error instanceof InsufficientCreditsError || Boolean(error && (error as { code?: string }).code === 'INSUFFICIENT_CREDITS');\n}\n","import type { AgentRegistrationRequest } from '@hashgraphonline/standards-sdk';\nimport { registerPipeline } from './registry';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\nimport type { CreditShortfallSummary } from './errors';\nimport { runCreditAwareRegistration } from './utils/credits';\n\ninterface RegistrationInput {\n payload: Record<string, unknown>;\n}\n\ninterface RegistrationContext {\n payload: Record<string, unknown>;\n attemptId?: string;\n result?: unknown;\n uaid?: string;\n quote?: CreditShortfallSummary;\n}\n\nconst registrationDefinition: PipelineDefinition<RegistrationInput, RegistrationContext> = {\n name: 'workflow.registerMcp',\n description: 'Quote, register, and wait for completion.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: ({ payload }) => ({ payload }),\n steps: [\n {\n name: 'hol.getRegistrationQuote',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const quote = await withBroker((client) => client.getRegistrationQuote(context.payload));\n context.quote = quote;\n return quote;\n },\n },\n {\n name: 'hol.registerAgent',\n run: async ({ context }) => {\n const response = await runCreditAwareRegistration({\n payload: context.payload as AgentRegistrationRequest,\n onShortfall: async (err) => {\n context.quote = err.summary;\n return 'abort';\n },\n });\n if ('attemptId' in response && typeof response.attemptId === 'string') {\n context.attemptId = response.attemptId;\n }\n context.result = response;\n return response;\n },\n },\n {\n name: 'hol.waitForRegistrationCompletion',\n run: async ({ context }) => {\n if (!context.attemptId) {\n throw new Error('Registration attemptId missing.');\n }\n const result = await withBroker((client) =>\n client.waitForRegistrationCompletion(context.attemptId!, {\n intervalMs: 2_000,\n timeoutMs: 5 * 60_000,\n }),\n );\n if (result?.result?.uaid) {\n context.uaid = result.result.uaid;\n }\n return result;\n },\n },\n ],\n};\n\nexport const registrationPipeline = registerPipeline(registrationDefinition);\n","import type { AgentAuthConfig } from '@hashgraphonline/standards-sdk';\nimport { registerPipeline } from './registry';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\ninterface ChatInput {\n uaid: string;\n message?: string;\n auth?: AgentAuthConfig;\n}\n\ninterface ChatContext {\n sessionId?: string;\n uaid: string;\n transcript: unknown;\n auth?: AgentAuthConfig;\n}\n\nconst chatDefinition: PipelineDefinition<ChatInput, ChatContext> = {\n name: 'workflow.chatSmoke',\n description: 'Create a chat session, send a message, read history, compact, and close.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: ({ uaid, auth }) => ({ uaid, auth, transcript: undefined }),\n steps: [\n {\n name: 'hol.chat.createSession',\n run: async ({ context }) => {\n const response = await withBroker((client) =>\n client.chat.createSession({ uaid: context.uaid, historyTtlSeconds: 60, auth: context.auth }),\n );\n if (response?.sessionId) {\n context.sessionId = response.sessionId;\n }\n return response;\n },\n },\n {\n name: 'hol.chat.sendMessage',\n run: async ({ input, context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n return withBroker((client) =>\n client.chat.sendMessage({\n sessionId: context.sessionId!,\n message: input.message ?? 'Hello from workflow.chatSmoke',\n auth: input.auth ?? context.auth,\n }),\n );\n },\n },\n {\n name: 'hol.chat.history',\n run: async ({ context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n const history = await withBroker((client) => client.chat.getHistory(context.sessionId!));\n context.transcript = history;\n return history;\n },\n },\n {\n name: 'hol.chat.compact',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n try {\n return await withBroker((client) => client.chat.compactHistory({ sessionId: context.sessionId!, preserveEntries: 2 }));\n } catch (error) {\n const message = error instanceof Error ? error.message.toLowerCase() : '';\n if (message.includes('authenticated account required') || message.includes('insufficient credits')) {\n return { skipped: true, reason: 'history compaction requires authenticated account' };\n }\n throw error;\n }\n },\n },\n {\n name: 'hol.chat.end',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n return withBroker((client) => client.chat.endSession(context.sessionId!));\n },\n },\n ],\n};\n\nexport const chatPipeline = registerPipeline(chatDefinition);\n","import { registerPipeline } from './registry';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\ninterface OpsInput {\n inspect?: boolean;\n}\n\ninterface OpsContext {\n stats?: unknown;\n metrics?: unknown;\n dashboard?: unknown;\n}\n\nconst opsDefinition: PipelineDefinition<OpsInput, OpsContext> = {\n name: 'workflow.opsCheck',\n description: 'Run stats, metrics, dashboard, listProtocols, detectProtocol.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'hol.stats',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.stats());\n context.stats = response;\n return response;\n },\n },\n {\n name: 'hol.metricsSummary',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.metricsSummary());\n context.metrics = response;\n return response;\n },\n },\n {\n name: 'hol.dashboardStats',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.dashboardStats());\n context.dashboard = response;\n return response;\n },\n },\n {\n name: 'hol.listProtocols',\n allowDuringDryRun: true,\n run: async () => withBroker((client) => client.listProtocols()),\n },\n {\n name: 'hol.detectProtocol',\n allowDuringDryRun: true,\n run: async () =>\n withBroker((client) =>\n client.detectProtocol({\n headers: { 'content-type': 'application/json' },\n body: '{}',\n } as any),\n ),\n },\n ],\n};\n\nexport const opsPipeline = registerPipeline(opsDefinition);\n","import { registerPipeline } from './registry';\nimport type { PipelineDefinition } from './types';\nimport { discoveryPipeline } from './discovery';\nimport { registrationPipeline } from './registration';\nimport { chatPipeline } from './chat';\nimport { opsPipeline } from './ops';\n\ninterface FullWorkflowInput {\n registrationPayload: Record<string, unknown>;\n discoveryQuery?: string;\n chatMessage?: string;\n}\n\ninterface FullWorkflowContext {\n discovery?: unknown;\n registration?: unknown;\n chat?: unknown;\n ops?: unknown;\n uaid?: string;\n}\n\nconst fullDefinition: PipelineDefinition<FullWorkflowInput, FullWorkflowContext> = {\n name: 'workflow.fullRegistration',\n description: 'Discovery → Registration → Chat → Ops health check',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY', 'HEDERA_ACCOUNT_ID', 'HEDERA_PRIVATE_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'workflow.discovery',\n allowDuringDryRun: true,\n run: async ({ input, context }) => {\n const result = await discoveryPipeline.run({ query: input.discoveryQuery, limit: 5 });\n context.discovery = result;\n return result;\n },\n },\n {\n name: 'workflow.registerMcp',\n run: async ({ input, context, dryRun }) => {\n const payload = { payload: input.registrationPayload };\n const result = await registrationPipeline.run(payload, { dryRun });\n context.registration = result;\n context.uaid = result.context.uaid;\n return result;\n },\n },\n {\n name: 'workflow.chatSmoke',\n run: async ({ input, context, dryRun }) => {\n if (!context.uaid) throw new Error('UAID missing from registration context');\n const result = await chatPipeline.run({ uaid: context.uaid, message: input.chatMessage }, { dryRun });\n context.chat = result;\n return result;\n },\n },\n {\n name: 'workflow.opsCheck',\n allowDuringDryRun: true,\n run: async ({ context, dryRun }) => {\n const result = await opsPipeline.run({}, { dryRun });\n context.ops = result;\n return result;\n },\n },\n ],\n};\n\nexport const fullWorkflowPipeline = registerPipeline(fullDefinition);\n","import type { PipelineDefinition } from './types';\nimport { registerPipeline } from './registry';\n\ninterface WorkflowMetadata {\n name: string;\n description: string;\n version?: string;\n requiredEnv?: string[];\n}\n\nexport function scaffoldWorkflow<TInput, TContext>(definition: PipelineDefinition<TInput, TContext>) {\n if (!definition.version) {\n definition.version = '1.0.0';\n }\n if (!definition.requiredEnv) {\n definition.requiredEnv = ['REGISTRY_BROKER_API_KEY'];\n }\n return registerPipeline(definition);\n}\n\nexport function defineWorkflow<TInput, TContext>(metadata: WorkflowMetadata, steps: PipelineDefinition<TInput, TContext>['steps'], createContext: PipelineDefinition<TInput, TContext>['createContext']) {\n return scaffoldWorkflow({ ...metadata, steps, createContext });\n}\n","import { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\ninterface OpenRouterChatInput {\n modelId: string;\n registry?: string;\n message: string;\n authToken?: string;\n historyTtlSeconds?: number;\n}\n\ninterface OpenRouterChatContext {\n uaid?: string;\n sessionId?: string;\n transcript?: unknown;\n}\n\nconst openRouterChatDefinition: PipelineDefinition<OpenRouterChatInput, OpenRouterChatContext> = {\n name: 'workflow.openrouterChat',\n description: 'Discover an OpenRouter model and run a chat message against it.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'hol.search',\n run: async ({ input, context }) => {\n const result = await withBroker((client) =>\n client.search({ q: input.modelId, registries: input.registry ? [input.registry] : ['openrouter'], limit: 1 }),\n );\n if (!result.hits?.length) {\n throw new Error(`Model ${input.modelId} not found in registry ${input.registry ?? 'openrouter'}`);\n }\n context.uaid = result.hits[0].uaid;\n return result.hits[0];\n },\n },\n {\n name: 'hol.chat.createSession',\n run: async ({ input, context }) => {\n if (!context.uaid) throw new Error('UAID missing from discovery step');\n const auth = input.authToken ? { type: 'bearer' as const, token: input.authToken } : undefined;\n const response = await withBroker((client) =>\n client.chat.createSession({\n uaid: context.uaid!,\n historyTtlSeconds: input.historyTtlSeconds ?? 900,\n auth,\n }),\n );\n context.sessionId = response.sessionId;\n return response;\n },\n },\n {\n name: 'hol.chat.sendMessage',\n run: async ({ input, context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n const auth = input.authToken ? { type: 'bearer' as const, token: input.authToken } : undefined;\n return withBroker((client) =>\n client.chat.sendMessage({ sessionId: context.sessionId!, auth, message: input.message }),\n );\n },\n },\n {\n name: 'hol.chat.history',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n const history = await withBroker((client) => client.chat.getHistory(context.sessionId!));\n context.transcript = history;\n return history;\n },\n },\n {\n name: 'hol.chat.end',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n return withBroker((client) => client.chat.endSession(context.sessionId!));\n },\n },\n ],\n};\n\nexport const openRouterChatWorkflow = scaffoldWorkflow(openRouterChatDefinition);\n","import { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\nimport { discoveryPipeline } from './discovery';\nimport { chatPipeline } from './chat';\nimport { opsPipeline } from './ops';\n\nexport interface RegistryShowcaseInput {\n query?: string;\n uaid?: string;\n message?: string;\n performCreditCheck?: boolean;\n}\n\ninterface RegistryShowcaseContext {\n discovery?: unknown;\n uaid?: string;\n listProtocols?: unknown;\n detectProtocol?: unknown;\n stats?: unknown;\n metrics?: unknown;\n dashboard?: unknown;\n websocket?: unknown;\n chat?: unknown;\n creditQuote?: unknown;\n}\n\nconst registryShowcaseDefinition: PipelineDefinition<RegistryShowcaseInput, RegistryShowcaseContext> = {\n name: 'workflow.registryBrokerShowcase',\n description: 'Discovery + analytics + chat showcase workflow inspired by registry-broker-demo.ts.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'workflow.discovery',\n allowDuringDryRun: true,\n run: async ({ input, context, dryRun }) => {\n const result = await discoveryPipeline.run({ query: input.query }, { dryRun });\n context.discovery = result;\n context.uaid = input.uaid ?? (result.steps[0]?.output as any)?.hits?.[0]?.uaid;\n return result;\n },\n },\n {\n name: 'hol.listProtocols',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.listProtocols());\n context.listProtocols = response;\n return response;\n },\n },\n {\n name: 'hol.detectProtocol',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.detectProtocol({ headers: { 'content-type': 'application/json' }, body: '{}' }));\n context.detectProtocol = response;\n return response;\n },\n },\n {\n name: 'hol.stats',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.stats());\n context.stats = response;\n return response;\n },\n },\n {\n name: 'hol.metricsSummary',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.metricsSummary());\n context.metrics = response;\n return response;\n },\n },\n {\n name: 'hol.dashboardStats',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.dashboardStats());\n context.dashboard = response;\n return response;\n },\n },\n {\n name: 'hol.websocketStats',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.websocketStats());\n context.websocket = response;\n return response;\n },\n },\n {\n name: 'workflow.registryBrokerShowcase.chat',\n skip: ({ input, context }) => !(input.message && context.uaid),\n run: async ({ input, context, dryRun }) => {\n if (!context.uaid) throw new Error('No UAID discovered for chat');\n const result = await chatPipeline.run({ uaid: context.uaid, message: input.message }, { dryRun });\n context.chat = result;\n return result;\n },\n },\n {\n name: 'hol.getRegistrationQuote',\n skip: ({ input }) => !input.performCreditCheck,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.getRegistrationQuote(context.discovery?.context?.registrationPayload || context.discovery));\n context.creditQuote = response;\n return response;\n },\n },\n ],\n};\n\nexport const registryBrokerShowcaseWorkflow = scaffoldWorkflow(registryShowcaseDefinition);\n","import type { AgentAuthConfig } from '@hashgraphonline/standards-sdk';\nimport { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\ninterface BridgeInput {\n uaid: string;\n localMessage: string;\n agentverseMessage: string;\n agentverseUaid: string;\n localAuth?: AgentAuthConfig;\n agentverseAuth?: AgentAuthConfig;\n iterations?: number;\n}\n\ninterface BridgeContext {\n localSession?: string;\n agentverseSession?: string;\n transcripts: Array<{ target: 'local' | 'agentverse'; response: unknown }>;\n}\n\nconst agentverseBridgeDefinition: PipelineDefinition<BridgeInput, BridgeContext> = {\n name: 'workflow.agentverseBridge',\n description: 'Relay messages between a local UAID session and an Agentverse UAID.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({ transcripts: [] }),\n steps: [\n {\n name: 'workflow.agentverseBridge.createSessions',\n run: async ({ input, context }) => {\n const local = await withBroker((client) =>\n client.chat.createSession({ uaid: input.uaid, auth: input.localAuth, historyTtlSeconds: 300 }),\n );\n const agentverse = await withBroker((client) =>\n client.chat.createSession({ uaid: input.agentverseUaid, auth: input.agentverseAuth, historyTtlSeconds: 300 }),\n );\n context.localSession = local.sessionId;\n context.agentverseSession = agentverse.sessionId;\n return { local, agentverse };\n },\n },\n {\n name: 'workflow.agentverseBridge.relay',\n run: async ({ input, context }) => {\n if (!context.localSession || !context.agentverseSession) {\n throw new Error('Sessions missing');\n }\n const iterations = input.iterations ?? 1;\n for (let i = 0; i < iterations; i += 1) {\n const localResponse = await withBroker((client) =>\n client.chat.sendMessage({ sessionId: context.localSession!, auth: input.localAuth, message: input.localMessage }),\n );\n context.transcripts.push({ target: 'local', response: localResponse });\n const agentverseResponse = await withBroker((client) =>\n client.chat.sendMessage({ sessionId: context.agentverseSession!, auth: input.agentverseAuth, message: input.agentverseMessage }),\n );\n context.transcripts.push({ target: 'agentverse', response: agentverseResponse });\n }\n return context.transcripts;\n },\n },\n {\n name: 'workflow.agentverseBridge.history',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const localHistory = await withBroker((client) => client.chat.getHistory(context.localSession!));\n const agentverseHistory = await withBroker((client) => client.chat.getHistory(context.agentverseSession!));\n return { localHistory, agentverseHistory };\n },\n },\n {\n name: 'workflow.agentverseBridge.cleanup',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n await Promise.all([\n withBroker((client) => client.chat.endSession(context.localSession!)),\n withBroker((client) => client.chat.endSession(context.agentverseSession!)),\n ]);\n return { ended: true };\n },\n },\n ],\n};\n\nexport const agentverseBridgeWorkflow = scaffoldWorkflow(agentverseBridgeDefinition);\n","import { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\ninterface Erc8004DiscoveryInput {\n query?: string;\n limit?: number;\n}\n\ninterface Erc8004DiscoveryContext {\n hits?: unknown;\n}\n\nconst erc8004DiscoveryDefinition: PipelineDefinition<Erc8004DiscoveryInput, Erc8004DiscoveryContext> = {\n name: 'workflow.erc8004Discovery',\n description: 'Filter search/vector/namespace lookups for ERC-8004 registries.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'hol.search',\n allowDuringDryRun: true,\n run: async ({ input, context }) => {\n const response = await withBroker((client) =>\n client.search({ q: input.query, registries: ['erc-8004'], limit: input.limit ?? 10 }),\n );\n context.hits = response.hits;\n return response;\n },\n },\n {\n name: 'hol.registrySearchByNamespace',\n allowDuringDryRun: true,\n run: async ({ input }) => withBroker((client) => client.registrySearchByNamespace('erc-8004', input.query)),\n },\n ],\n};\n\nexport const erc8004DiscoveryWorkflow = scaffoldWorkflow(erc8004DiscoveryDefinition);\n","import type { AgentRegistrationRequest, AdditionalRegistryCatalogResponse } from '@hashgraphonline/standards-sdk';\nimport { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\nimport type { CreditShortfallSummary } from './errors';\nimport { runCreditAwareRegistration, waitForRegistrationCompletion } from './utils/credits';\n\ninterface CreditTopUpConfig {\n accountId: string;\n privateKey: string;\n hbarAmount?: number;\n memo?: string;\n maxRetries?: number;\n}\n\nexport interface RegisterAgentAdvancedInput {\n payload: AgentRegistrationRequest;\n additionalRegistrySelections?: string[];\n updateAdditionalRegistries?: string[];\n skipUpdate?: boolean;\n creditTopUp?: CreditTopUpConfig;\n}\n\ninterface RegisterAgentAdvancedContext {\n payload: AgentRegistrationRequest;\n resolvedRegistries: string[];\n missingRegistries: string[];\n lastQuote?: CreditShortfallSummary;\n attemptId?: string;\n uaid?: string;\n registrationResult?: unknown;\n updateResult?: unknown;\n progress?: unknown;\n}\n\nconst registerAgentAdvancedDefinition: PipelineDefinition<RegisterAgentAdvancedInput, RegisterAgentAdvancedContext> = {\n name: 'workflow.registerAgentAdvanced',\n description: 'Extended registration workflow with additional registries and optional updates.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: ({ payload }) => ({ payload, resolvedRegistries: [], missingRegistries: [] }),\n steps: [\n {\n name: 'hol.getAdditionalRegistries',\n allowDuringDryRun: true,\n skip: ({ input }) => !input.additionalRegistrySelections?.length && !input.updateAdditionalRegistries?.length,\n run: async () => withBroker((client) => client.getAdditionalRegistries()),\n },\n {\n name: 'workflow.resolveAdditionalRegistries',\n allowDuringDryRun: true,\n run: async ({ input, context }, resultFromCatalog) => {\n if (!resultFromCatalog) return null;\n const catalog = resultFromCatalog as AdditionalRegistryCatalogResponse;\n const selections = input.additionalRegistrySelections ?? [];\n const { resolved, missing } = resolveAdditionalSelections(selections, catalog);\n context.resolvedRegistries = resolved;\n context.missingRegistries = missing;\n if (resolved.length > 0) {\n context.payload = {\n ...context.payload,\n additionalRegistries: resolved,\n };\n }\n return { resolved, missing };\n },\n },\n {\n name: 'hol.getRegistrationQuote',\n allowDuringDryRun: true,\n run: async ({ context }) => withBroker((client) => client.getRegistrationQuote(context.payload)),\n },\n {\n name: 'workflow.registerAgentAdvanced.register',\n run: async ({ input, context }) => {\n const response = await runCreditAwareRegistration({\n payload: context.payload,\n onShortfall: async (summary) => {\n context.lastQuote = summary;\n if (!input.creditTopUp) {\n return 'abort';\n }\n await purchaseCreditsWithHbar(input.creditTopUp, summary);\n return 'retry';\n },\n });\n context.registrationResult = response;\n if ('attemptId' in response && typeof response.attemptId === 'string') {\n context.attemptId = response.attemptId;\n }\n if ('uaid' in response && typeof response.uaid === 'string') {\n context.uaid = response.uaid;\n }\n return response;\n },\n },\n {\n name: 'hol.waitForRegistrationCompletion',\n run: async ({ context }) => {\n if (!context.attemptId) throw new Error('Registration attemptId missing.');\n const result = await waitForRegistrationCompletion(context.attemptId);\n context.progress = result;\n if (result?.result?.uaid) {\n context.uaid = result.result.uaid;\n }\n return result;\n },\n },\n {\n name: 'workflow.registerAgentAdvanced.update',\n skip: ({ input }) => input.skipUpdate || !input.updateAdditionalRegistries?.length,\n run: async ({ input, context }) => {\n if (!context.uaid) throw new Error('UAID missing for update.');\n const resolved = input.updateAdditionalRegistries ?? [];\n const updatePayload: AgentRegistrationRequest = {\n ...context.payload,\n additionalRegistries: resolved,\n };\n const response = await withBroker((client) => client.updateAgent(context.uaid!, updatePayload));\n context.updateResult = response;\n return response;\n },\n },\n ],\n};\n\nexport const registerAgentAdvancedPipeline = scaffoldWorkflow(registerAgentAdvancedDefinition);\n\nfunction resolveAdditionalSelections(selections: string[], catalog: AdditionalRegistryCatalogResponse) {\n const resolved = new Set<string>();\n const missing: string[] = [];\n for (const selection of selections) {\n const matches = collectMatches(selection, catalog);\n if (matches.length === 0) {\n missing.push(selection);\n } else {\n matches.forEach((key) => resolved.add(key));\n }\n }\n return { resolved: Array.from(resolved), missing };\n}\n\nfunction collectMatches(selection: string, catalog: AdditionalRegistryCatalogResponse) {\n const target = selection.trim().toLowerCase();\n if (!target) return [];\n const matches: string[] = [];\n for (const registry of catalog.registries) {\n const registryId = registry.id.toLowerCase();\n if (registryId === target) {\n registry.networks.forEach((network) => matches.push(network.key));\n continue;\n }\n for (const network of registry.networks) {\n const keyLower = network.key.toLowerCase();\n const networkIdLower = network.networkId?.toLowerCase();\n const labelLower = network.label?.toLowerCase();\n const nameLower = network.name?.toLowerCase();\n if (\n target === keyLower ||\n (networkIdLower && target === networkIdLower) ||\n (labelLower && target === labelLower) ||\n (nameLower && target === nameLower) ||\n target === `${registryId}:${networkIdLower}`\n ) {\n matches.push(network.key);\n }\n }\n }\n return matches;\n}\n\nasync function purchaseCreditsWithHbar(config: CreditTopUpConfig, summary: CreditShortfallSummary) {\n const hbarAmount = config.hbarAmount ?? Math.max(0.25, (summary.shortfallCredits ?? 1) / 100);\n await withBroker((client) =>\n client.purchaseCreditsWithHbar({\n accountId: config.accountId,\n privateKey: config.privateKey,\n hbarAmount,\n memo: config.memo ?? 'workflow.registerAgentAdvanced:topup',\n metadata: {\n shortfall: summary.shortfallCredits,\n requiredCredits: summary.requiredCredits,\n },\n }),\n );\n}\n","import type { AgentRegistrationRequest, AdditionalRegistryCatalogResponse, LedgerVerifyRequest } from '@hashgraphonline/standards-sdk';\nimport { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\nimport { registerAgentAdvancedPipeline, type RegisterAgentAdvancedInput } from './register-advanced';\n\nexport interface RegisterAgentErc8004Input extends RegisterAgentAdvancedInput {\n erc8004Networks?: string[];\n ledgerVerification?: LedgerVerifyRequest;\n}\n\ninterface RegisterAgentErc8004Context {\n resolvedNetworks: string[];\n missingNetworks: string[];\n advancedResult?: unknown;\n}\n\nconst registerAgentErc8004Definition: PipelineDefinition<RegisterAgentErc8004Input, RegisterAgentErc8004Context> = {\n name: 'workflow.registerAgentErc8004',\n description: 'ERC-8004-specific registration workflow with optional ledger verification.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({ resolvedNetworks: [], missingNetworks: [] }),\n steps: [\n {\n name: 'hol.getAdditionalRegistries',\n allowDuringDryRun: true,\n run: async () => withBroker((client) => client.getAdditionalRegistries()),\n },\n {\n name: 'workflow.erc8004.resolveNetworks',\n allowDuringDryRun: true,\n run: async ({ input, context }, catalog) => {\n const response = catalog as AdditionalRegistryCatalogResponse;\n const selections = input.erc8004Networks?.length ? input.erc8004Networks : defaultErc8004Selections(response);\n const { resolved, missing } = resolveErc8004Selections(selections, response);\n context.resolvedNetworks = resolved;\n context.missingNetworks = missing;\n return { resolved, missing };\n },\n },\n {\n name: 'hol.ledger.authenticate',\n skip: ({ input }) => !input.ledgerVerification,\n run: async ({ input }) => withBroker((client) => client.verifyLedgerChallenge(input.ledgerVerification!)),\n },\n {\n name: 'workflow.registerAgentAdvanced',\n run: async ({ input, context, dryRun }) => {\n const advancedInput: RegisterAgentAdvancedInput = {\n payload: withAdditionalRegistries(input.payload, context.resolvedNetworks),\n additionalRegistrySelections: context.resolvedNetworks,\n updateAdditionalRegistries: input.updateAdditionalRegistries,\n skipUpdate: input.skipUpdate,\n creditTopUp: input.creditTopUp,\n };\n const result = await registerAgentAdvancedPipeline.run(advancedInput, { dryRun });\n context.advancedResult = result;\n return result;\n },\n },\n ],\n};\n\nexport const registerAgentErc8004Pipeline = scaffoldWorkflow(registerAgentErc8004Definition);\n\nfunction resolveErc8004Selections(selections: string[], catalog: AdditionalRegistryCatalogResponse) {\n const resolved = new Set<string>();\n const missing: string[] = [];\n selections.forEach((entry) => {\n const normalized = entry.trim().toLowerCase();\n if (!normalized) return;\n let matched = false;\n for (const descriptor of catalog.registries) {\n if (!descriptor.id.toLowerCase().startsWith('erc-8004')) continue;\n for (const network of descriptor.networks) {\n const candidates = [network.key, network.networkId, network.label, network.name]\n .map((value) => value?.toLowerCase().trim())\n .filter(Boolean);\n if (candidates.includes(normalized) || `${descriptor.id.toLowerCase()}:${network.networkId?.toLowerCase()}` === normalized) {\n resolved.add(network.key);\n matched = true;\n }\n }\n }\n if (!matched) {\n missing.push(entry);\n }\n });\n return { resolved: Array.from(resolved), missing };\n}\n\nfunction defaultErc8004Selections(catalog: AdditionalRegistryCatalogResponse) {\n const defaults = catalog.registries.find((entry) => entry.id.toLowerCase() === 'erc-8004');\n if (!defaults) return [];\n return defaults.networks.map((network) => network.key);\n}\n\nfunction withAdditionalRegistries(payload: AgentRegistrationRequest, networks: string[]) {\n if (networks.length === 0) return payload;\n return { ...payload, additionalRegistries: networks };\n}\n","import type { BuyCreditsWithX402Params, LedgerVerifyRequest } from '@hashgraphonline/standards-sdk';\nimport { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\nexport interface X402TopUpInput {\n accountId: string;\n credits: number;\n usdAmount?: number;\n description?: string;\n metadata?: Record<string, unknown>;\n evmPrivateKey: string;\n network?: 'base' | 'base-sepolia';\n rpcUrl?: string;\n ledgerVerification?: LedgerVerifyRequest;\n}\n\ninterface X402TopUpContext {\n minimums?: unknown;\n ledgerVerification?: unknown;\n purchase?: unknown;\n}\n\nconst x402TopUpDefinition: PipelineDefinition<X402TopUpInput, X402TopUpContext> = {\n name: 'workflow.x402TopUp',\n description: 'Buy registry credits via X402 using an EVM wallet.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'hol.ledger.authenticate',\n skip: ({ input }) => !input.ledgerVerification,\n run: async ({ input, context }) => {\n const verification = await withBroker((client) => client.verifyLedgerChallenge(input.ledgerVerification!));\n context.ledgerVerification = verification;\n return verification;\n },\n },\n {\n name: 'hol.x402.minimums',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const minimums = await withBroker((client) => client.getX402Minimums());\n context.minimums = minimums;\n return minimums;\n },\n },\n {\n name: 'hol.x402.buyCredits',\n run: async ({ input, context }) => {\n const payload: BuyCreditsWithX402Params = {\n accountId: input.accountId,\n credits: input.credits,\n usdAmount: input.usdAmount,\n description: input.description,\n metadata: input.metadata,\n evmPrivateKey: input.evmPrivateKey,\n network: input.network,\n rpcUrl: input.rpcUrl,\n } as BuyCreditsWithX402Params;\n const purchase = await withBroker((client) => client.buyCreditsWithX402(payload));\n context.purchase = purchase;\n return purchase;\n },\n },\n ],\n};\n\nexport const x402TopUpWorkflow = scaffoldWorkflow(x402TopUpDefinition);\n","import type { AgentRegistrationRequest, LedgerVerifyRequest } from '@hashgraphonline/standards-sdk';\nimport { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { registerAgentErc8004Pipeline } from './register-erc8004';\nimport { x402TopUpWorkflow } from './x402-topup';\nimport { chatPipeline } from './chat';\n\ninterface Erc8004X402Input {\n payload: AgentRegistrationRequest;\n erc8004Networks?: string[];\n creditPurchase?: {\n accountId: string;\n credits: number;\n evmPrivateKey: string;\n ledgerVerification?: LedgerVerifyRequest;\n network?: 'base' | 'base-sepolia';\n };\n chatMessage?: string;\n}\n\nconst erc8004X402Definition: PipelineDefinition<Erc8004X402Input, Record<string, unknown>> = {\n name: 'workflow.erc8004X402',\n description: 'Register on ERC-8004 networks with X402 credit purchases and chat smoke.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'workflow.x402TopUp',\n skip: ({ input }) => !input.creditPurchase,\n run: async ({ input, dryRun }) =>\n x402TopUpWorkflow.run(\n {\n accountId: input.creditPurchase!.accountId,\n credits: input.creditPurchase!.credits,\n evmPrivateKey: input.creditPurchase!.evmPrivateKey,\n network: input.creditPurchase!.network,\n ledgerVerification: input.creditPurchase!.ledgerVerification,\n },\n { dryRun },\n ),\n },\n {\n name: 'workflow.registerAgentErc8004',\n run: async ({ input, dryRun }) =>\n registerAgentErc8004Pipeline.run(\n {\n payload: input.payload,\n erc8004Networks: input.erc8004Networks,\n creditTopUp: undefined,\n },\n { dryRun },\n ),\n },\n {\n name: 'workflow.erc8004X402.chat',\n skip: ({ input }) => !input.chatMessage,\n run: async ({ input, context, dryRun }) => {\n const uaid = (context?.context as any)?.registrationResult?.context?.uaid;\n if (!uaid) throw new Error('UAID missing after registration');\n return chatPipeline.run({ uaid, message: input.chatMessage }, { dryRun });\n },\n },\n ],\n};\n\nexport const erc8004X402Workflow = scaffoldWorkflow(erc8004X402Definition);\n","import type { AgentRegistrationRequest, LedgerVerifyRequest } from '@hashgraphonline/standards-sdk';\nimport { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { x402TopUpWorkflow } from './x402-topup';\nimport { registerAgentAdvancedPipeline } from './register-advanced';\nimport { chatPipeline } from './chat';\n\ninterface X402RegistrationInput {\n payload: AgentRegistrationRequest;\n x402: {\n accountId: string;\n credits: number;\n evmPrivateKey: string;\n ledgerVerification?: LedgerVerifyRequest;\n };\n chatMessage?: string;\n}\n\nconst x402RegistrationDefinition: PipelineDefinition<X402RegistrationInput, Record<string, unknown>> = {\n name: 'workflow.x402Registration',\n description: 'Full agent registration funded via X402 credits with chat validation.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'workflow.x402TopUp',\n run: async ({ input, dryRun }) =>\n x402TopUpWorkflow.run(\n {\n accountId: input.x402.accountId,\n credits: input.x402.credits,\n evmPrivateKey: input.x402.evmPrivateKey,\n ledgerVerification: input.x402.ledgerVerification,\n },\n { dryRun },\n ),\n },\n {\n name: 'workflow.registerAgentAdvanced',\n run: async ({ input, dryRun }) => registerAgentAdvancedPipeline.run({ payload: input.payload }, { dryRun }),\n },\n {\n name: 'workflow.x402Registration.chat',\n skip: ({ input }) => !input.chatMessage,\n run: async ({ input, context, dryRun }) => {\n const uaid = (context.context as any)?.registrationResult?.context?.uaid;\n if (!uaid) throw new Error('UAID missing after registration');\n return chatPipeline.run({ uaid, message: input.chatMessage }, { dryRun });\n },\n },\n ],\n};\n\nexport const x402RegistrationWorkflow = scaffoldWorkflow(x402RegistrationDefinition);\n","import { runSSE, runStdio } from './transports';\nimport { logger } from './logger';\n\nconst transport = (process.env.MCP_TRANSPORT ?? 'sse').toLowerCase();\n\nif (transport === 'stdio') {\n logger.info({ transport }, 'starting MCP server');\n runStdio().catch((err) => {\n logger.error({ err }, 'Failed to start stdio transport');\n process.exitCode = 1;\n });\n} else {\n logger.info({ transport }, 'starting MCP server');\n runSSE().catch((err) => {\n logger.error({ err }, 'Failed to start SSE transport');\n process.exitCode = 1;\n });\n}\n"],"mappings":"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","names":["randomUUID","RegistryBrokerError","z","z","RegistryBrokerError","RegistryBrokerError","config","normalized","z","RegistryBrokerError","randomUUID"]}
|
|
1
|
+
{"version":3,"sources":["../src/transports/index.ts","../src/mcp.ts","../src/broker.ts","../src/config.ts","../src/logger.ts","../src/schemas/agent.ts","../src/workflows/env.ts","../src/workflows/pipeline.ts","../src/workflows/registry.ts","../src/workflows/discovery.ts","../src/workflows/utils/credits.ts","../src/workflows/errors.ts","../src/workflows/registration.ts","../src/workflows/chat.ts","../src/workflows/ops.ts","../src/workflows/combined.ts","../src/workflows/scaffold.ts","../src/workflows/openrouter-chat.ts","../src/workflows/registry-showcase.ts","../src/workflows/agentverse-bridge.ts","../src/workflows/erc8004-discovery.ts","../src/workflows/register-advanced.ts","../src/workflows/register-erc8004.ts","../src/workflows/x402-topup.ts","../src/workflows/erc8004-x402.ts","../src/workflows/x402-registration.ts","../src/index.ts"],"sourcesContent":["import http, { IncomingMessage, ServerResponse } from 'node:http';\nimport { randomUUID } from 'node:crypto';\nimport { PassThrough } from 'node:stream';\nimport { mcp, registeredTools } from '../mcp';\nimport { config } from '../config';\nimport { logger } from '../logger';\n\nconst LOOPBACK = '127.0.0.1';\n\nexport async function runStdio() {\n logger.info('Starting stdio transport');\n await mcp.start({ transportType: 'stdio' });\n logger.info('Stdio transport started');\n}\n\nexport async function runSSE() {\n const upstreamPort = config.httpStreamPort ?? config.port + 1;\n await startHttpStreamBackend(upstreamPort);\n\n const gateway = createGatewayServer(upstreamPort);\n await new Promise<void>((resolve, reject) => {\n gateway.once('error', reject);\n gateway.listen(config.port, () => {\n logger.info({ port: config.port, upstreamPort }, 'Gateway listening');\n resolve();\n });\n });\n}\n\nasync function startHttpStreamBackend(port: number) {\n await mcp.start({\n transportType: 'httpStream',\n httpStream: {\n port,\n host: LOOPBACK,\n endpoint: '/mcp/stream',\n enableJsonResponse: false,\n },\n });\n logger.info({ port }, 'HTTP stream backend ready');\n}\n\nexport function createGatewayServer(upstreamPort: number) {\n return http.createServer(createGatewayHandler(upstreamPort));\n}\n\nexport function createGatewayHandler(upstreamPort: number) {\n return (req: IncomingMessage, res: ServerResponse) => {\n if (!req.url) {\n res.writeHead(400).end('Missing URL');\n return;\n }\n if (req.url.startsWith('/healthz')) {\n const body = JSON.stringify({\n status: 'ok',\n uptime: process.uptime(),\n tools: registeredTools.length,\n requestId: randomUUID(),\n });\n res.writeHead(200, { 'content-type': 'application/json' });\n res.end(body);\n return;\n }\n proxyRequest(req, res, upstreamPort);\n };\n}\n\nfunction proxyRequest(req: IncomingMessage, res: ServerResponse, upstreamPort: number) {\n logger.debug({ method: req.method, url: req.url }, 'gateway.forward');\n const proxyReq = http.request(\n {\n hostname: LOOPBACK,\n port: upstreamPort,\n method: req.method,\n path: req.url,\n headers: {\n ...req.headers,\n host: `${LOOPBACK}:${upstreamPort}`,\n },\n },\n (proxyRes) => {\n res.writeHead(proxyRes.statusCode ?? 502, proxyRes.headers);\n proxyRes.pipe(res);\n },\n );\n\n proxyReq.on('error', (error) => {\n logger.error({ error }, 'proxy.error');\n if (!res.headersSent) {\n res.writeHead(502);\n }\n res.end('Upstream error');\n });\n\n if (req.method && ['POST', 'PUT', 'PATCH'].includes(req.method)) {\n const tee = new PassThrough();\n let preview = '';\n tee.on('data', (chunk) => {\n if (preview.length < 512) {\n preview += chunk.toString();\n }\n });\n tee.on('end', () => {\n if (preview.length) {\n logger.debug({ preview: preview.slice(0, 512) }, 'proxy.preview');\n }\n });\n req.pipe(tee).pipe(proxyReq);\n } else {\n req.pipe(proxyReq);\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { AgentAuthConfig, LedgerChallengeRequest, LedgerVerifyRequest, RegistryBrokerClient, RegistryBrokerError } from '@hashgraphonline/standards-sdk';\nimport { FastMCP } from 'fastmcp';\nimport type { Context, Content } from 'fastmcp';\nimport { z } from 'zod';\nimport { getCreditBalance, withBroker } from './broker';\nimport { config } from './config';\nimport { logger } from './logger';\nimport { agentRegistrationSchema } from './schemas/agent';\nimport { discoveryPipeline } from './workflows/discovery';\nimport { registrationPipeline } from './workflows/registration';\nimport { chatPipeline } from './workflows/chat';\nimport { opsPipeline } from './workflows/ops';\nimport { fullWorkflowPipeline } from './workflows/combined';\nimport { openRouterChatWorkflow } from './workflows/openrouter-chat';\nimport { registryBrokerShowcaseWorkflow } from './workflows/registry-showcase';\nimport { agentverseBridgeWorkflow } from './workflows/agentverse-bridge';\nimport { erc8004DiscoveryWorkflow } from './workflows/erc8004-discovery';\nimport { erc8004X402Workflow } from './workflows/erc8004-x402';\nimport { x402RegistrationWorkflow } from './workflows/x402-registration';\nimport type { PipelineRunResult } from './workflows/types';\n\ntype AgentRegistrationRequest = Parameters<RegistryBrokerClient['registerAgent']>[0];\ntype ChatCreateSessionPayload = Parameters<RegistryBrokerClient['chat']['createSession']>[0];\ntype ChatSendMessagePayload = Parameters<RegistryBrokerClient['chat']['sendMessage']>[0];\ntype ChatCompactPayload = Parameters<RegistryBrokerClient['chat']['compactHistory']>[0];\ntype UpdateAgentPayload = Parameters<RegistryBrokerClient['updateAgent']>[1];\ntype RegistrySearchNamespaceArgs = Parameters<RegistryBrokerClient['registrySearchByNamespace']>;\ntype PurchaseHbarPayload = Parameters<RegistryBrokerClient['purchaseCreditsWithHbar']>[0];\ntype BuyX402Payload = Parameters<RegistryBrokerClient['buyCreditsWithX402']>[0];\n\nconst connectionInstructions = [\n 'You expose the Hashgraph Online Registry Broker via hol.* primitives and workflow.* pipelines. Prefer workflow.* when possible—they bundle common steps and return a pipeline summary plus full results.',\n 'Discovery: use workflow.discovery (or hol.search / hol.vectorSearch) to find UAIDs/agents/MCP servers; pass q/query and optional filters like capabilities, metadata, or type=ai-agents|mcp-servers.',\n 'Registration: workflow.registerMcp (quote → register → wait) is the default; workflow.fullRegistration adds discovery/chat/ops. hol.registerAgent + hol.waitForRegistrationCompletion are the lower-level primitives.',\n 'Chat: call hol.resolveUaid if the UAID is unverified, then hol.chat.createSession (uaid + optional auth) followed by hol.chat.sendMessage (sessionId or uaid). Use hol.chat.history/compact/end to manage the session.',\n 'Operations: workflow.opsCheck or hol.stats/hol.metricsSummary/hol.dashboardStats show registry health; hol.listProtocols + hol.detectProtocol help route third-party requests.',\n 'Credits: check hol.credits.balance before purchases. Use hol.purchaseCredits.hbar or hol.x402.buyCredits only with explicit user approval (X402 requires an EVM key); hol.x402.minimums provides thresholds.',\n 'Always include UAIDs/sessionIds exactly as given and echo any auth headers/tokens the user supplies. If required fields are missing (UAID, payload, accountId), ask for them before calling tools.',\n 'Additional help resources: help://rb/search documents hol.search filters; help://hol/usage lists common recipes.',\n].join('\\n');\n\nconst agentAuthSchema: z.ZodType<AgentAuthConfig> = z\n .object({\n type: z.enum(['bearer', 'basic', 'header', 'apiKey']).optional(),\n token: z.string().optional(),\n username: z.string().optional(),\n password: z.string().optional(),\n headerName: z.string().optional(),\n headerValue: z.string().optional(),\n headers: z.record(z.string(), z.string()).optional(),\n })\n .partial() as z.ZodType<AgentAuthConfig>;\n\nconst chatSessionSchema: z.ZodType<ChatCreateSessionPayload> = z.object({\n uaid: z.string().min(1),\n historyTtlSeconds: z.number().int().positive().optional(),\n auth: agentAuthSchema.optional(),\n senderUaid: z.string().min(1).optional(),\n encryptionRequested: z.boolean().optional(),\n}) as z.ZodType<ChatCreateSessionPayload>;\n\nconst chatMessageSchema: z.ZodType<ChatSendMessagePayload> = z\n .object({\n sessionId: z.string().min(1).optional(),\n uaid: z.string().min(1).optional(),\n message: z.string().min(1),\n streaming: z.boolean().optional(),\n auth: agentAuthSchema.optional(),\n })\n .superRefine((value, ctx) => {\n if (!value.sessionId && !value.uaid) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'Provide sessionId for existing chats or uaid to start a new one.' });\n }\n }) as z.ZodType<ChatSendMessagePayload>;\n\nconst chatCompactSchema: z.ZodType<ChatCompactPayload> = z.object({\n sessionId: z.string().min(1),\n preserveEntries: z.number().int().min(0).default(4),\n auth: agentAuthSchema.optional(),\n}) as z.ZodType<ChatCompactPayload>;\n\nconst searchInput = z.object({\n q: z.string().optional(),\n limit: z.number().int().min(1).max(50).default(10),\n capabilities: z.array(z.string()).optional(),\n registries: z.array(z.string()).optional(),\n minTrust: z.number().int().min(0).max(100).optional(),\n verified: z.boolean().optional(),\n online: z.boolean().optional(),\n sortBy: z.enum(['trust', 'latency', 'most-recent']).optional(),\n sortOrder: z.enum(['asc', 'desc']).optional(),\n metadata: z.record(z.string(), z.array(z.string())).optional(),\n type: z.enum(['ai-agents', 'mcp-servers']).optional(),\n});\n\nconst vectorSearchInput = z.object({\n query: z.string().min(1),\n limit: z.number().int().min(1).max(20).default(5),\n});\n\nconst uaidInput = z.object({ uaid: z.string().min(1) });\n\nconst registrationPayload = z.object({\n payload: agentRegistrationSchema,\n});\n\nconst workflowDiscoveryInput = z.object({\n query: z.string().optional(),\n limit: z.number().int().min(1).max(50).optional(),\n});\n\nconst workflowRegistrationInput = z.object({\n payload: agentRegistrationSchema,\n});\n\nconst workflowChatInput = z.object({\n uaid: z.string().min(1),\n message: z.string().optional(),\n});\n\nconst workflowOpsInput = z.object({});\n\nconst workflowFullInput = z.object({\n registrationPayload: agentRegistrationSchema,\n discoveryQuery: z.string().optional(),\n chatMessage: z.string().optional(),\n});\nconst openRouterChatToolSchema = z.object({\n modelId: z.string().min(1),\n registry: z.string().optional(),\n message: z.string(),\n authToken: z.string().optional(),\n});\nconst registryShowcaseToolSchema = z.object({\n query: z.string().optional(),\n uaid: z.string().optional(),\n message: z.string().optional(),\n performCreditCheck: z.boolean().optional(),\n});\nconst erc8004DiscoveryToolSchema = z.object({ query: z.string().optional(), limit: z.number().int().positive().optional() });\nconst bridgePayloadSchema = z.object({\n uaid: z.string().min(1),\n agentverseUaid: z.string().min(1),\n localMessage: z.string().min(1),\n agentverseMessage: z.string().min(1),\n iterations: z.number().int().positive().optional(),\n});\nconst erc8004X402ToolSchema = z.object({\n payload: agentRegistrationSchema,\n erc8004Networks: z.array(z.string()).optional(),\n chatMessage: z.string().optional(),\n});\nconst x402RegistrationToolSchema = z.object({\n payload: agentRegistrationSchema,\n x402: z.object({\n accountId: z.string().min(1),\n credits: z.number().positive(),\n evmPrivateKey: z.string().min(1),\n ledgerVerification: z\n .object({\n challengeId: z.string().min(1),\n accountId: z.string().min(1),\n network: z.enum(['mainnet', 'testnet']),\n signature: z.string().min(1),\n signatureKind: z.enum(['raw', 'map']).optional(),\n publicKey: z.string().optional(),\n expiresInMinutes: z.number().int().positive().optional(),\n })\n .optional(),\n }),\n chatMessage: z.string().optional(),\n});\n\ntype SearchInput = z.infer<typeof searchInput>;\ntype VectorSearchInput = z.infer<typeof vectorSearchInput>;\ntype UaidInput = z.infer<typeof uaidInput>;\ntype SessionAuth = Record<string, unknown> | undefined;\ntype RegistrationInput = z.infer<typeof registrationPayload>;\ntype WaitForRegistrationInput = z.infer<typeof waitForRegistrationInput>;\ntype UpdateAgentInput = z.infer<typeof updateAgentInput>;\ntype RegistryNamespaceInput = z.infer<typeof registryNamespaceInput>;\ntype ChatSessionInput = z.infer<typeof chatSessionSchema>;\ntype ChatMessageInput = z.infer<typeof chatMessageSchema>;\ntype ChatCompactInput = z.infer<typeof chatCompactSchema>;\ntype CreditBalanceInput = z.infer<typeof creditBalanceInput>;\ntype LedgerChallengeInput = z.infer<typeof ledgerChallengeInput>;\ntype LedgerVerifyInput = z.infer<typeof ledgerVerifyInput>;\ntype PurchaseHbarInput = z.infer<typeof purchaseHbarInput>;\ntype BuyX402Input = z.infer<typeof buyX402Input>;\ntype BridgePayload = z.infer<typeof bridgePayloadSchema>;\ntype Erc8004X402Input = z.infer<typeof erc8004X402ToolSchema>;\ntype X402RegistrationInput = z.infer<typeof x402RegistrationToolSchema>;\ntype FullWorkflowInput = z.infer<typeof workflowFullInput>;\n\nconst waitForRegistrationInput = z.object({\n attemptId: z.string(),\n intervalMs: z.number().int().positive().default(2_000),\n timeoutMs: z.number().int().positive().default(5 * 60 * 1000),\n});\n\nconst detectProtocolInput = z.object({\n headers: z.record(z.string(), z.string()),\n body: z.string().optional(),\n});\n\nconst sessionIdInput = z.object({ sessionId: z.string().min(1) });\n\nconst emptyObject = z.object({});\n\nconst updateAgentInput = z.object({\n uaid: z.string().min(1),\n payload: agentRegistrationSchema,\n});\n\nconst registryNamespaceInput = z.object({\n registry: z.string().min(1),\n query: z.string().optional(),\n});\n\nconst creditBalanceInput = z.object({\n hederaAccountId: z.string().min(1).optional(),\n x402AccountId: z.string().min(1).optional(),\n});\n\nconst ledgerNetworkEnum = z.enum(['mainnet', 'testnet']);\n\nconst ledgerChallengeInput = z.object({\n accountId: z.string().min(1),\n network: ledgerNetworkEnum,\n});\n\nconst ledgerVerifyInput = z.object({\n challengeId: z.string().min(1),\n accountId: z.string().min(1),\n network: ledgerNetworkEnum,\n signature: z.string().min(1),\n signatureKind: z.enum(['raw', 'map']).optional(),\n publicKey: z.string().optional(),\n expiresInMinutes: z.number().int().positive().optional(),\n});\n\nconst purchaseHbarInput: z.ZodType<PurchaseHbarPayload> = z.object({\n accountId: z.string().min(1),\n privateKey: z.string().min(1),\n hbarAmount: z.number().positive(),\n memo: z.string().optional(),\n metadata: z.record(z.string(), z.any()).optional(),\n}) as z.ZodType<PurchaseHbarPayload>;\n\nconst buyX402Input: z.ZodType<BuyX402Payload> = z.object({\n accountId: z.string().min(1),\n credits: z.number().positive(),\n usdAmount: z.number().positive().optional(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.any()).optional(),\n evmPrivateKey: z.string().min(1),\n network: z.enum(['base', 'base-sepolia']).optional(),\n rpcUrl: z.string().url().optional(),\n}) as z.ZodType<BuyX402Payload>;\n\nexport const mcp = new FastMCP({\n name: 'hashgraph-standards',\n version: '1.0.0',\n instructions: connectionInstructions,\n // Route FastMCP logging to our pino logger (stderr) to keep stdio transport clean.\n logger: {\n debug: (...args: unknown[]) => logger.debug(args),\n info: (...args: unknown[]) => logger.info(args),\n warn: (...args: unknown[]) => logger.warn(args),\n error: (...args: unknown[]) => logger.error(args),\n log: (...args: unknown[]) => logger.info(args),\n },\n});\n\ntype ToolDefinition<Schema extends z.ZodTypeAny = z.ZodTypeAny> = {\n name: string;\n description: string;\n schema: Schema;\n handler: (input: z.infer<Schema>) => Promise<unknown>;\n};\n\nconst rawToolDefinitions = [\n {\n name: 'hol.search',\n description: 'Keyword search for agents or MCP servers with filtering controls.',\n schema: searchInput,\n handler: (input: SearchInput) => withBroker((client) => client.search(input), 'hol.search'),\n },\n {\n name: 'hol.vectorSearch',\n description: 'Vector similarity search across registered agents.',\n schema: vectorSearchInput,\n handler: (input: VectorSearchInput) => withBroker((client) => client.vectorSearch(input), 'hol.vectorSearch'),\n },\n {\n name: 'hol.resolveUaid',\n description: 'Resolve, validate, and check the status of a UAID in one call.',\n schema: uaidInput,\n handler: ({ uaid }: UaidInput) =>\n withBroker(async (client) => {\n const [resolved, validation, status] = await Promise.all([\n client.resolveUaid(uaid),\n client.validateUaid(uaid),\n client.getUaidConnectionStatus(uaid),\n ]);\n return { resolved, validation, status };\n }, 'hol.resolveUaid'),\n },\n {\n name: 'hol.closeUaidConnection',\n description: 'Force-close any open UAID connection.',\n schema: uaidInput,\n handler: ({ uaid }: UaidInput) => withBroker((client) => client.closeUaidConnection(uaid), 'hol.closeUaidConnection'),\n },\n {\n name: 'hol.getRegistrationQuote',\n description: 'Estimate fees for a given agent registration payload.',\n schema: registrationPayload,\n handler: ({ payload }: RegistrationInput) => withBroker((client) => client.getRegistrationQuote(payload), 'hol.getRegistrationQuote'),\n },\n {\n name: 'hol.registerAgent',\n description: 'Submit an HCS-11-compatible agent registration.',\n schema: registrationPayload,\n handler: ({ payload }: RegistrationInput) => withBroker((client) => client.registerAgent(payload), 'hol.registerAgent'),\n },\n {\n name: 'hol.waitForRegistrationCompletion',\n description: 'Poll the registry broker until a registration attempt resolves.',\n schema: waitForRegistrationInput,\n handler: ({ attemptId, intervalMs, timeoutMs }: WaitForRegistrationInput) =>\n withBroker((client) =>\n client.waitForRegistrationCompletion(attemptId, {\n intervalMs,\n timeoutMs,\n }),\n 'hol.waitForRegistrationCompletion',\n ),\n },\n {\n name: 'hol.updateAgent',\n description: 'Update an existing agent registration payload.',\n schema: updateAgentInput,\n handler: ({ uaid, payload }: UpdateAgentInput) =>\n withBroker((client) => client.updateAgent(uaid, payload as UpdateAgentPayload), 'hol.updateAgent'),\n },\n {\n name: 'hol.additionalRegistries',\n description: 'Retrieve the catalog of additional registries and networks.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.getAdditionalRegistries(), 'hol.additionalRegistries'),\n },\n {\n name: 'hol.registrySearchByNamespace',\n description: 'Search within a specific registry namespace.',\n schema: registryNamespaceInput,\n handler: ({ registry, query }: RegistryNamespaceInput) =>\n withBroker((client) => client.registrySearchByNamespace(registry, query), 'hol.registrySearchByNamespace'),\n },\n {\n name: 'hol.chat.createSession',\n description: 'Open a chat session linked to a UAID.',\n schema: chatSessionSchema,\n handler: (input: ChatSessionInput) => withBroker((client) => client.chat.createSession(input), 'hol.chat.createSession'),\n },\n {\n name: 'hol.chat.sendMessage',\n description: 'Send a message to an active chat session.',\n schema: chatMessageSchema,\n handler: (input: ChatMessageInput) =>\n withBroker(async (client) => {\n const { sessionId, uaid, message, auth, streaming } = input;\n if (sessionId) {\n const payload: ChatSendMessagePayload = { sessionId, message, auth, streaming };\n return client.chat.sendMessage(payload);\n }\n\n if (!uaid) {\n throw new Error('sessionId missing; provide uaid so a session can be created before sending.');\n }\n\n // Auto-create a session when callers only supply a UAID.\n const session = await client.chat.createSession({ uaid, auth });\n const derivedSessionId = session.sessionId;\n if (!derivedSessionId) {\n throw new Error('Unable to determine sessionId from broker response when auto-creating chat session.');\n }\n\n const payload: ChatSendMessagePayload = {\n sessionId: derivedSessionId,\n message,\n auth,\n streaming,\n };\n\n return client.chat.sendMessage(payload);\n }, 'hol.chat.sendMessage'),\n },\n {\n name: 'hol.chat.history',\n description: 'Retrieve the message history for a chat session.',\n schema: sessionIdInput,\n handler: ({ sessionId }: z.infer<typeof sessionIdInput>) =>\n withBroker((client) => client.chat.getHistory(sessionId), 'hol.chat.history'),\n },\n {\n name: 'hol.chat.compact',\n description: 'Compact chat history while preserving the latest entries.',\n schema: chatCompactSchema,\n handler: (input: ChatCompactInput) => withBroker((client) => client.chat.compactHistory(input), 'hol.chat.compact'),\n },\n {\n name: 'hol.chat.end',\n description: 'End a chat session and release broker resources.',\n schema: sessionIdInput,\n handler: ({ sessionId }: z.infer<typeof sessionIdInput>) =>\n withBroker((client) => client.chat.endSession(sessionId), 'hol.chat.end'),\n },\n {\n name: 'hol.listProtocols',\n description: 'List all registered protocols/adapters known to the broker.',\n schema: emptyObject,\n handler: () => runBrokerCall('hol.listProtocols', () => withBroker((client) => client.listProtocols(), 'hol.listProtocols')),\n },\n {\n name: 'hol.detectProtocol',\n description: 'Detect the expected protocol for an inbound request payload.',\n schema: detectProtocolInput,\n handler: (input: z.infer<typeof detectProtocolInput>) =>\n runBrokerCall('hol.detectProtocol', () => withBroker((client) => client.detectProtocol(input as any), 'hol.detectProtocol')),\n },\n {\n name: 'hol.stats',\n description: 'High-level registry statistics and usage metrics.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.stats(), 'hol.stats'),\n },\n {\n name: 'hol.metricsSummary',\n description: 'Aggregated broker metrics suitable for dashboards.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.metricsSummary(), 'hol.metricsSummary'),\n },\n {\n name: 'hol.dashboardStats',\n description: 'Detailed dashboard statistics from the broker.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.dashboardStats(), 'hol.dashboardStats'),\n },\n {\n name: 'hol.websocketStats',\n description: 'Retrieve websocket connection counts and throughput.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.websocketStats(), 'hol.websocketStats'),\n },\n {\n name: 'hol.ledger.challenge',\n description: 'Create a ledger challenge message for account verification.',\n schema: ledgerChallengeInput,\n handler: (input: LedgerChallengeInput) =>\n withBroker((client) => client.createLedgerChallenge(input as LedgerChallengeRequest), 'hol.ledger.challenge'),\n },\n {\n name: 'hol.ledger.authenticate',\n description: 'Verify a signed ledger challenge (sets ledger API key).',\n schema: ledgerVerifyInput,\n handler: (input: LedgerVerifyInput) =>\n withBroker((client) => client.verifyLedgerChallenge(input as LedgerVerifyRequest), 'hol.ledger.authenticate'),\n },\n {\n name: 'hol.purchaseCredits.hbar',\n description: 'Purchase registry credits using HBAR funds.',\n schema: purchaseHbarInput,\n handler: (input: PurchaseHbarInput) =>\n withBroker((client) => client.purchaseCreditsWithHbar(input), 'hol.purchaseCredits.hbar'),\n },\n {\n name: 'hol.credits.balance',\n description: 'Fetch credit balances for the current API key and optional Hedera/X402 accounts.',\n schema: creditBalanceInput,\n handler: async (input: CreditBalanceInput) => {\n const hederaAccountId = input.hederaAccountId;\n const [apiKeyBalance, hederaBalance, x402Balance] = await Promise.all([\n getCreditBalance(),\n hederaAccountId ? safeBalanceLookup('hedera', hederaAccountId) : Promise.resolve(null),\n input.x402AccountId ? safeBalanceLookup('x402', input.x402AccountId) : Promise.resolve(null),\n ]);\n return {\n apiKey: apiKeyBalance,\n hedera: hederaBalance,\n x402: x402Balance,\n };\n },\n },\n {\n name: 'hol.x402.minimums',\n description: 'Fetch the minimum credit purchase requirements for X402.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.getX402Minimums(), 'hol.x402.minimums'),\n },\n {\n name: 'hol.x402.buyCredits',\n description: 'Buy registry credits via X402 using an EVM private key.',\n schema: buyX402Input,\n handler: (input: BuyX402Input) => withBroker((client) => client.buyCreditsWithX402(input), 'hol.x402.buyCredits'),\n },\n {\n name: 'workflow.discovery',\n description: 'Pipeline: hol.search + hol.vectorSearch',\n schema: workflowDiscoveryInput,\n handler: async (input: z.infer<typeof workflowDiscoveryInput>) =>\n formatPipelineResult(await discoveryPipeline.run(input)),\n },\n {\n name: 'workflow.registerMcp',\n description: 'Pipeline: get quote, register agent, wait for completion',\n schema: workflowRegistrationInput,\n handler: async ({ payload }: z.infer<typeof workflowRegistrationInput>) =>\n formatPipelineResult(await registrationPipeline.run({ payload })),\n },\n {\n name: 'workflow.chatSmoke',\n description: 'Pipeline: chat session smoke test for UAID',\n schema: workflowChatInput,\n handler: async (input: z.infer<typeof workflowChatInput>) =>\n formatPipelineResult(await chatPipeline.run(input)),\n },\n {\n name: 'workflow.opsCheck',\n description: 'Pipeline: stats, metrics, dashboard, protocols',\n schema: workflowOpsInput,\n handler: async () => formatPipelineResult(await opsPipeline.run({})),\n },\n {\n name: 'workflow.openrouterChat',\n description: 'Pipeline: discover OpenRouter model and run a chat message',\n schema: openRouterChatToolSchema,\n handler: async (input: z.infer<typeof openRouterChatToolSchema>) =>\n formatPipelineResult(await openRouterChatWorkflow.run(input)),\n },\n {\n name: 'workflow.registryBrokerShowcase',\n description: 'Pipeline: discovery, analytics, UAID validation, chat',\n schema: registryShowcaseToolSchema,\n handler: async (input: z.infer<typeof registryShowcaseToolSchema>) =>\n formatPipelineResult(await registryBrokerShowcaseWorkflow.run(input)),\n },\n {\n name: 'workflow.agentverseBridge',\n description: 'Pipeline: relay chat between local UAID and Agentverse UAID',\n schema: bridgePayloadSchema,\n handler: async (input: BridgePayload) =>\n formatPipelineResult(await agentverseBridgeWorkflow.run(input)),\n },\n {\n name: 'workflow.erc8004Discovery',\n description: 'Pipeline: search ERC-8004 registries',\n schema: erc8004DiscoveryToolSchema,\n handler: async (input: z.infer<typeof erc8004DiscoveryToolSchema>) =>\n formatPipelineResult(await erc8004DiscoveryWorkflow.run(input)),\n },\n {\n name: 'workflow.erc8004X402',\n description: 'Pipeline: ERC-8004 registration funded via X402 credits',\n schema: erc8004X402ToolSchema,\n handler: async (input: Erc8004X402Input) => formatPipelineResult(await erc8004X402Workflow.run(input)),\n },\n {\n name: 'workflow.x402Registration',\n description: 'Pipeline: register agent using X402 payments + chat smoke test',\n schema: x402RegistrationToolSchema,\n handler: async (input: X402RegistrationInput) => formatPipelineResult(await x402RegistrationWorkflow.run(input)),\n },\n {\n name: 'workflow.fullRegistration',\n description: 'Pipeline: discovery → register → chat → ops',\n schema: workflowFullInput,\n handler: async (input: FullWorkflowInput) => formatPipelineResult(await fullWorkflowPipeline.run(input)),\n },\n];\n\nexport const toolDefinitions: ToolDefinition[] = rawToolDefinitions as unknown as ToolDefinition[];\n\nfunction formatPipelineResult(result: PipelineRunResult<unknown>) {\n const contextRecord =\n result.context && typeof result.context === 'object' ? (result.context as Record<string, unknown>) : {};\n const contextUaid = typeof contextRecord.uaid === 'string' ? (contextRecord.uaid as string) : undefined;\n const summaryLines = [\n `Workflow: ${result.pipeline}`,\n result.dryRun ? '(dry-run)' : undefined,\n contextUaid ? `UAID: ${contextUaid}` : undefined,\n `Steps executed: ${result.steps.length}`,\n ].filter(Boolean) as string[];\n\n return {\n content: [\n { type: 'text', text: summaryLines.join('\\n') },\n buildObjectContent('pipeline.result', result as unknown as Record<string, unknown>),\n ],\n };\n}\n\nexport function buildLoggedTool<S extends z.ZodTypeAny>(definition: ToolDefinition<S>) {\n return {\n name: definition.name,\n description: definition.description,\n parameters: definition.schema,\n execute: async (args: z.input<S>, context?: Context<SessionAuth>) => {\n const requestId = context?.requestId ?? randomUUID();\n const started = Date.now();\n try {\n const parsedInput = definition.schema.parse(args);\n logger.debug({ requestId, tool: definition.name }, 'tool.invoke');\n const result = await definition.handler(parsedInput as z.infer<S>);\n logger.info(\n {\n requestId,\n tool: definition.name,\n durationMs: Date.now() - started,\n },\n 'tool.success',\n );\n return normalizeResult(result);\n } catch (error) {\n logger.error(\n {\n requestId,\n tool: definition.name,\n durationMs: Date.now() - started,\n error: error instanceof Error ? error.message : String(error),\n },\n 'tool.failure',\n );\n throw error;\n }\n },\n };\n}\n\nfor (const definition of toolDefinitions) {\n mcp.addTool(buildLoggedTool(definition));\n}\n\nexport const registeredTools = toolDefinitions;\n\nfunction isContentValue(value: unknown): value is Content {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'type' in (value as Record<string, unknown>) &&\n typeof (value as Record<string, unknown>).type === 'string',\n );\n}\n\nfunction normalizeResult(value: unknown): { content: Content[]; structuredContent?: Record<string, unknown>; isError?: boolean } {\n if (isResultShape(value)) {\n const record = value as Record<string, unknown>;\n return {\n content: normalizeContent(record.content),\n isError: typeof record.isError === 'boolean' ? (record.isError as boolean) : undefined,\n };\n }\n if (isPlainObject(value)) {\n return {\n content: [buildObjectContent('tool.result', value as Record<string, unknown>)],\n };\n }\n return { content: normalizeContent(value) };\n}\n\nfunction normalizeContent(result: unknown): Content[] {\n if (Array.isArray(result) && result.every(isContentValue)) {\n return result;\n }\n if (isContentValue(result)) {\n return [result];\n }\n if (result === undefined || result === null) {\n return [{ type: 'text', text: 'ok' }];\n }\n if (typeof result === 'string' || typeof result === 'number' || typeof result === 'boolean') {\n return [{ type: 'text', text: String(result) }];\n }\n if (isPlainObject(result)) {\n return [buildObjectContent('tool.result', result as Record<string, unknown>)];\n }\n return [{ type: 'text', text: JSON.stringify(result) }];\n}\n\nfunction buildObjectContent(name: string, value: Record<string, unknown>): Content {\n return {\n type: 'text',\n text: `${name}:\\n${JSON.stringify(value, null, 2)}`,\n };\n}\n\nfunction isResultShape(value: unknown): value is { content?: unknown; structuredContent?: unknown; isError?: boolean } {\n return Boolean(value && typeof value === 'object' && ('content' in (value as Record<string, unknown>) || 'structuredContent' in (value as Record<string, unknown>)));\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === 'object' && !Array.isArray(value));\n}\n\nasync function runBrokerCall<T>(label: string, fn: () => Promise<T>) {\n try {\n return await fn();\n } catch (error) {\n if (error instanceof RegistryBrokerError) {\n const body = typeof error.body === 'object' ? JSON.stringify(error.body) : String(error.body);\n throw new Error(`${label} failed (${error.status} ${error.statusText ?? ''}): ${body}`);\n }\n throw error;\n }\n}\n\nasync function safeBalanceLookup(label: 'hedera' | 'x402', accountId: string) {\n try {\n return await getCreditBalance(accountId);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { error: `${label} balance unavailable: ${message}`, accountId };\n }\n}\n\nmcp.addResource({\n name: 'hol.search.help',\n uri: 'help://rb/search',\n mimeType: 'text/markdown',\n load: async () => [\n {\n text: [\n '# hol.search',\n '',\n 'Discover registered agents or MCP servers.',\n '',\n '- `q`: keyword search',\n '- `capabilities`: filter by declared skills',\n '- `metadata`: pass `{ \\\"region\\\": [\\\"na\\\"] }` style filters',\n '- `type`: limit results to `ai-agents` or `mcp-servers`',\n ].join('\\n'),\n },\n ],\n});\n\nmcp.addResource({\n name: 'hol.tools.guide',\n uri: 'help://hol/usage',\n mimeType: 'text/markdown',\n load: async () => [\n {\n text: [\n '# Hashnet MCP quick usage',\n '',\n 'Prefer workflow.* pipelines when available—they run multiple broker calls and return both a text summary and structured results:',\n '- Discovery: workflow.discovery { query?, limit? } (or hol.search / hol.vectorSearch).',\n '- Registration: workflow.registerMcp { payload } (quote → register → wait) or workflow.fullRegistration to add discovery/chat/ops.',\n '- Chat: hol.chat.createSession { uaid, auth?, historyTtlSeconds? } → hol.chat.sendMessage { sessionId OR uaid, message, auth?, streaming? } → hol.chat.history/compact/end.',\n '- UAID validation/resets: hol.resolveUaid { uaid }, hol.closeUaidConnection { uaid }.',\n '- Ops/metrics: workflow.opsCheck or hol.stats / hol.metricsSummary / hol.dashboardStats.',\n '- Credits: hol.credits.balance first, then hol.purchaseCredits.hbar or hol.x402.buyCredits (X402 requires evmPrivateKey; call hol.x402.minimums to inspect limits).',\n '- Protocols: hol.listProtocols and hol.detectProtocol when inspecting inbound requests.',\n '',\n 'Ask the user for any missing UAID, registration payload fields, accountId, or auth tokens before calling tools. Keep sessionId/uaid strings verbatim.',\n ].join('\\n'),\n },\n ],\n});\n","import { RegistryBrokerClient, RegistryBrokerError } from '@hashgraphonline/standards-sdk';\nimport Bottleneck from 'bottleneck';\nimport IORedis from 'ioredis';\nimport { fetch as undiciFetch } from 'undici';\nimport type { Response as UndiciResponse } from 'undici';\nimport { config } from './config';\n\nconst autoTopUpConfig = config.autoTopUpEnabled\n ? {\n accountId: config.hederaAccountId!,\n privateKey: config.hederaPrivateKey!,\n memo: 'mcp-autotopup',\n }\n : undefined;\n\nconst broker = new RegistryBrokerClient({\n baseUrl: config.registryBrokerUrl,\n apiKey: config.registryBrokerApiKey,\n fetchImplementation: undiciFetch as unknown as typeof fetch,\n registrationAutoTopUp: autoTopUpConfig,\n historyAutoTopUp: autoTopUpConfig,\n});\n\nconst brokerLimiter = createLimiter();\n\nfunction createLimiter() {\n if (!config.rateLimit) return undefined;\n\n const redisClient = config.rateLimit.redis?.url ? new IORedis(config.rateLimit.redis.url) : undefined;\n const limiterOptions: Bottleneck.ConstructorOptions = {\n ...(config.rateLimit.maxConcurrent !== undefined\n ? { maxConcurrent: config.rateLimit.maxConcurrent }\n : {}),\n ...(config.rateLimit.minTimeMs !== undefined\n ? { minTime: config.rateLimit.minTimeMs }\n : {}),\n ...(config.rateLimit.reservoir !== undefined\n ? { reservoir: config.rateLimit.reservoir }\n : {}),\n ...(config.rateLimit.reservoirRefreshAmount !== undefined\n ? { reservoirRefreshAmount: config.rateLimit.reservoirRefreshAmount }\n : {}),\n ...(config.rateLimit.reservoirRefreshIntervalMs !== undefined\n ? { reservoirRefreshInterval: config.rateLimit.reservoirRefreshIntervalMs }\n : {}),\n ...(redisClient ? { datastore: 'ioredis' as const, connection: redisClient as unknown as Bottleneck.IORedisConnection } : {}),\n };\n\n if (\n !limiterOptions.maxConcurrent &&\n !limiterOptions.minTime &&\n !limiterOptions.reservoir &&\n !limiterOptions.datastore\n ) {\n return undefined;\n }\n\n return new Bottleneck(limiterOptions);\n}\n\ntype BrokerTask<T> = (client: RegistryBrokerClient) => Promise<T>;\n\nexport async function withBroker<T>(task: BrokerTask<T>, label?: string): Promise<T> {\n const run = async () => {\n if (!config.registryBrokerApiKey) {\n throw new Error('REGISTRY_BROKER_API_KEY is required to call the registry broker. Set it in your environment or .env file.');\n }\n try {\n return await task(broker);\n } catch (error) {\n throw formatBrokerError(error, label);\n }\n };\n if (brokerLimiter) {\n return brokerLimiter.schedule(run);\n }\n return run();\n}\n\nexport { broker, brokerLimiter };\n\nexport interface CreditBalanceResponse {\n accountId: string;\n balance: number;\n timestamp: string;\n}\n\nexport async function getCreditBalance(accountId?: string): Promise<CreditBalanceResponse> {\n if (!config.registryBrokerApiKey) {\n throw new Error('REGISTRY_BROKER_API_KEY is required to fetch credit balances.');\n }\n const base = config.registryBrokerUrl.endsWith('/') ? config.registryBrokerUrl : `${config.registryBrokerUrl}/`;\n const url = new URL('credits/balance', base);\n if (accountId) {\n url.searchParams.set('accountId', accountId);\n }\n const headers: Record<string, string> = {\n accept: 'application/json',\n 'x-api-key': config.registryBrokerApiKey,\n };\n const request = async () => {\n const response = await undiciFetch(url, { method: 'GET', headers });\n if (!response.ok) {\n const hint = await safeReadBody(response);\n throw new Error(`Failed to fetch credit balance (${response.status}): ${hint ?? response.statusText}`);\n }\n return (await response.json()) as CreditBalanceResponse;\n };\n if (brokerLimiter) {\n return brokerLimiter.schedule(request);\n }\n return request();\n}\n\nasync function safeReadBody(response: Response | UndiciResponse) {\n try {\n const text = await (response as any).text();\n return text || undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction formatBrokerError(error: unknown, label?: string): Error {\n if (error instanceof RegistryBrokerError) {\n const body =\n typeof error.body === 'object'\n ? JSON.stringify(error.body)\n : error.body\n ? String(error.body)\n : 'no response body';\n const statusText = error.statusText ? ` ${error.statusText}` : '';\n const prefix = label ? `${label} failed` : 'Registry broker request failed';\n return new Error(`${prefix} (${error.status}${statusText}): ${body}`);\n }\n return error instanceof Error ? error : new Error(String(error));\n}\n","import { config as loadEnv } from 'dotenv';\nimport { z } from 'zod';\n\nif (process.env.NODE_ENV !== 'test') {\n loadEnv({ quiet: true });\n}\n\nconst LOG_LEVELS = ['fatal', 'error', 'warn', 'info', 'debug', 'trace'] as const;\n\nconst envSchema = z\n .object({\n REGISTRY_BROKER_API_URL: z\n .string()\n .url()\n .default('https://registry.hashgraphonline.com/api/v1'),\n REGISTRY_BROKER_API_KEY: z.string().min(1).optional(),\n HEDERA_ACCOUNT_ID: z.string().min(1).optional(),\n HEDERA_PRIVATE_KEY: z.string().min(1).optional(),\n PORT: z.coerce.number().int().positive().default(3333),\n BROKER_MAX_CONCURRENT: z.coerce.number().int().positive().optional(),\n BROKER_MIN_TIME_MS: z.coerce.number().int().nonnegative().optional(),\n BROKER_RESERVOIR: z.coerce.number().int().positive().optional(),\n BROKER_RESERVOIR_REFRESH_INTERVAL_MS: z.coerce.number().int().positive().optional(),\n BROKER_RESERVOIR_REFRESH_AMOUNT: z.coerce.number().int().positive().optional(),\n BROKER_RATE_LIMIT_REDIS_URL: z.string().url().optional(),\n LOG_LEVEL: z.enum(LOG_LEVELS).default('info'),\n WORKFLOW_DRY_RUN: z\n .enum(['0', '1'])\n .optional()\n .transform((value) => value === '1'),\n BROKER_AUTO_TOP_UP: z\n .enum(['0', '1'])\n .optional()\n .transform((value) => value === '1'),\n HTTP_STREAM_PORT: z.coerce.number().int().positive().optional(),\n })\n .superRefine((val, ctx) => {\n const hasAccount = Boolean(val.HEDERA_ACCOUNT_ID);\n const hasKey = Boolean(val.HEDERA_PRIVATE_KEY);\n if (hasAccount !== hasKey) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'HEDERA_ACCOUNT_ID and HEDERA_PRIVATE_KEY must both be set to enable registrationAutoTopUp.',\n });\n }\n });\n\nconst normalized = (value?: string) => {\n if (value === undefined) return undefined;\n const trimmed = value.trim();\n return trimmed.length === 0 ? undefined : trimmed;\n};\n\nconst parsed = envSchema.safeParse({\n REGISTRY_BROKER_API_URL: normalized(process.env.REGISTRY_BROKER_API_URL),\n REGISTRY_BROKER_API_KEY: normalized(process.env.REGISTRY_BROKER_API_KEY),\n HEDERA_ACCOUNT_ID: normalized(process.env.HEDERA_ACCOUNT_ID),\n HEDERA_PRIVATE_KEY: normalized(process.env.HEDERA_PRIVATE_KEY),\n PORT: normalized(process.env.PORT),\n BROKER_MAX_CONCURRENT: normalized(process.env.BROKER_MAX_CONCURRENT),\n BROKER_MIN_TIME_MS: normalized(process.env.BROKER_MIN_TIME_MS),\n BROKER_RESERVOIR: normalized(process.env.BROKER_RESERVOIR),\n BROKER_RESERVOIR_REFRESH_INTERVAL_MS: normalized(process.env.BROKER_RESERVOIR_REFRESH_INTERVAL_MS),\n BROKER_RESERVOIR_REFRESH_AMOUNT: normalized(process.env.BROKER_RESERVOIR_REFRESH_AMOUNT),\n BROKER_RATE_LIMIT_REDIS_URL: normalized(process.env.BROKER_RATE_LIMIT_REDIS_URL),\n LOG_LEVEL: normalized(process.env.LOG_LEVEL),\n WORKFLOW_DRY_RUN: normalized(process.env.WORKFLOW_DRY_RUN),\n BROKER_AUTO_TOP_UP: normalized(process.env.BROKER_AUTO_TOP_UP),\n HTTP_STREAM_PORT: normalized(process.env.HTTP_STREAM_PORT),\n});\n\nif (!parsed.success) {\n throw new Error(`Invalid environment configuration:\\n${parsed.error.toString()}`);\n}\n\nexport const config = {\n registryBrokerUrl: parsed.data.REGISTRY_BROKER_API_URL,\n registryBrokerApiKey: parsed.data.REGISTRY_BROKER_API_KEY,\n hederaAccountId: parsed.data.HEDERA_ACCOUNT_ID,\n hederaPrivateKey: parsed.data.HEDERA_PRIVATE_KEY,\n port: parsed.data.PORT,\n autoTopUpEnabled:\n Boolean(parsed.data.BROKER_AUTO_TOP_UP) && Boolean(parsed.data.HEDERA_ACCOUNT_ID && parsed.data.HEDERA_PRIVATE_KEY),\n rateLimit: (() => {\n const {\n BROKER_MAX_CONCURRENT,\n BROKER_MIN_TIME_MS,\n BROKER_RESERVOIR,\n BROKER_RESERVOIR_REFRESH_AMOUNT,\n BROKER_RESERVOIR_REFRESH_INTERVAL_MS,\n BROKER_RATE_LIMIT_REDIS_URL,\n } = parsed.data;\n const hasLimiter =\n BROKER_MAX_CONCURRENT ||\n BROKER_MIN_TIME_MS ||\n BROKER_RESERVOIR ||\n BROKER_RATE_LIMIT_REDIS_URL;\n if (!hasLimiter) return undefined;\n return {\n maxConcurrent: BROKER_MAX_CONCURRENT,\n minTimeMs: BROKER_MIN_TIME_MS,\n reservoir: BROKER_RESERVOIR,\n reservoirRefreshAmount: BROKER_RESERVOIR_REFRESH_AMOUNT,\n reservoirRefreshIntervalMs: BROKER_RESERVOIR_REFRESH_INTERVAL_MS,\n redis: BROKER_RATE_LIMIT_REDIS_URL\n ? {\n url: BROKER_RATE_LIMIT_REDIS_URL,\n }\n : undefined,\n };\n })(),\n workflowDryRun: parsed.data.WORKFLOW_DRY_RUN ?? false,\n httpStreamPort: parsed.data.HTTP_STREAM_PORT,\n logLevel: parsed.data.LOG_LEVEL,\n};\n\nexport type AppConfig = typeof config;\n","import pino from 'pino';\nimport { config } from './config';\n\n// Log to stderr so stdio MCP transport keeps stdout reserved for protocol traffic.\nexport const logger = pino(\n {\n level: config.logLevel,\n base: undefined,\n },\n pino.destination(2),\n);\n","import { z } from 'zod';\nimport type { RegistryBrokerClient } from '@hashgraphonline/standards-sdk';\n\ntype AgentRegistrationRequest = Parameters<RegistryBrokerClient['registerAgent']>[0];\n\nconst socialLinkSchema = z.object({\n platform: z.string(),\n handle: z.string(),\n});\n\nconst aiAgentSchema = z.object({\n type: z.union([z.literal(0), z.literal(1)]),\n capabilities: z.array(z.number().int().nonnegative()),\n model: z.string(),\n creator: z.string().optional(),\n});\n\nconst mcpServerSchema = z.object({\n version: z.string(),\n connectionInfo: z.object({\n url: z.string().url(),\n transport: z.enum(['stdio', 'sse']),\n }),\n services: z.array(z.number().int().nonnegative()),\n description: z.string(),\n capabilities: z.array(z.string()).optional(),\n resources: z\n .array(\n z.object({\n name: z.string(),\n description: z.string(),\n }),\n )\n .optional(),\n tools: z\n .array(\n z.object({\n name: z.string(),\n description: z.string(),\n }),\n )\n .optional(),\n maintainer: z.string().optional(),\n repository: z.string().optional(),\n docs: z.string().optional(),\n});\n\nconst baseProfileSchema = z.object({\n version: z.string(),\n type: z.number().int(),\n display_name: z.string(),\n alias: z.string().optional(),\n bio: z.string().optional(),\n socials: z.array(socialLinkSchema).optional(),\n profileImage: z.string().optional(),\n uaid: z.string().optional(),\n properties: z.record(z.string(), z.any()).optional(),\n inboundTopicId: z.string().optional(),\n outboundTopicId: z.string().optional(),\n base_account: z.string().optional(),\n});\n\nexport const agentProfileSchema = baseProfileSchema.extend({\n aiAgent: aiAgentSchema.optional(),\n mcpServer: mcpServerSchema.optional(),\n});\n\nconst metadataSchema = z.object({\n trustScore: z.number().min(0).max(100).optional(),\n verified: z.boolean().optional(),\n avgLatency: z.number().nonnegative().optional(),\n uptime: z.number().min(0).max(100).optional(),\n provider: z.string().optional(),\n category: z.string().optional(),\n adapter: z.string().optional(),\n openConvAICompatible: z.boolean().optional(),\n customFields: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional(),\n});\n\nexport const agentRegistrationSchema = z.object({\n profile: agentProfileSchema,\n endpoint: z.string().url().optional(),\n protocol: z.string().optional(),\n communicationProtocol: z.string().optional(),\n registry: z.string().optional(),\n additionalRegistries: z.array(z.string()).optional(),\n metadata: metadataSchema.optional(),\n}) as unknown as z.ZodType<AgentRegistrationRequest>;\n","import type { Logger } from 'pino';\n\ninterface EnsureEnvOptions {\n logger?: Logger;\n context?: string;\n}\n\nexport function ensureRequiredEnv(requiredEnv: string[] | undefined, options?: EnsureEnvOptions) {\n if (!requiredEnv?.length) return;\n\n const missing = getMissingEnvVars(requiredEnv);\n if (missing.length > 0) {\n options?.logger?.error?.({ missingEnv: missing }, 'workflow.env.missing');\n const label = options?.context ?? 'workflow';\n throw new Error(`Missing required environment variables for ${label}: ${missing.join(', ')}`);\n }\n}\n\nexport function getMissingEnvVars(requiredEnv: string[]): string[] {\n return requiredEnv.filter((variable) => {\n const value = process.env[variable];\n return value === undefined || value.length === 0;\n });\n}\n\nexport function assertEnvVars(requiredEnv: string[], context: string) {\n ensureRequiredEnv(requiredEnv, { context });\n}\n","import { config } from '../config';\nimport { logger as baseLogger } from '../logger';\nimport { ensureRequiredEnv } from './env';\nimport type {\n PipelineDefinition,\n PipelineExecutionOptions,\n PipelineRunResult,\n PipelineStep,\n PipelineStepResult,\n PipelineStepRunArgs,\n} from './types';\n\nexport function createPipeline<TInput, TContext>(definition: PipelineDefinition<TInput, TContext>) {\n async function run(input: TInput, options?: PipelineExecutionOptions<TContext>): Promise<PipelineRunResult<TContext>> {\n const pipelineLogger = baseLogger.child({ pipeline: definition.name });\n const dryRun = options?.dryRun ?? config.workflowDryRun;\n ensureRequiredEnv(definition.requiredEnv, { logger: pipelineLogger, context: definition.name });\n const context = await definition.createContext(input);\n const stepsResults: PipelineStepResult<unknown>[] = [];\n\n for (let index = 0; index < definition.steps.length; index += 1) {\n const step = definition.steps[index] as PipelineStep<TInput, TContext, unknown>;\n const stepLogger = pipelineLogger.child({ step: step.name, index });\n const stepArgs: PipelineStepRunArgs<TInput, TContext> = {\n input,\n context,\n dryRun,\n logger: stepLogger,\n };\n\n const shouldSkip = await shouldSkipStep(step, stepArgs, dryRun);\n const startedAt = Date.now();\n\n if (shouldSkip) {\n stepLogger.info({ dryRun }, 'pipeline.step.skipped');\n stepsResults.push({ name: step.name, durationMs: 0, skipped: true });\n // eslint-disable-next-line no-await-in-loop\n await options?.hooks?.onStepStart?.({ pipeline: definition.name, step: step.name, index, context });\n // eslint-disable-next-line no-await-in-loop\n await options?.hooks?.onStepSuccess?.({ pipeline: definition.name, step: step.name, index, context, output: undefined });\n continue;\n }\n\n pipelineLogger.info({ step: step.name }, 'pipeline.step.start');\n // eslint-disable-next-line no-await-in-loop\n await options?.hooks?.onStepStart?.({ pipeline: definition.name, step: step.name, index, context });\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const output = await step.run(stepArgs);\n const durationMs = Date.now() - startedAt;\n stepLogger.info({ durationMs }, 'pipeline.step.success');\n stepsResults.push({ name: step.name, durationMs, skipped: false, output });\n // eslint-disable-next-line no-await-in-loop\n await options?.hooks?.onStepSuccess?.({ pipeline: definition.name, step: step.name, index, context, output });\n } catch (error) {\n const durationMs = Date.now() - startedAt;\n const message = error instanceof Error ? error.message : String(error);\n stepLogger.error({ durationMs, error: message }, 'pipeline.step.error');\n stepsResults.push({ name: step.name, durationMs, skipped: false, error: message });\n // eslint-disable-next-line no-await-in-loop\n await options?.hooks?.onStepError?.({ pipeline: definition.name, step: step.name, index, context, error });\n throw error;\n }\n }\n\n return {\n pipeline: definition.name,\n context,\n steps: stepsResults,\n dryRun,\n };\n }\n\n return { definition, run };\n}\n\nasync function shouldSkipStep<TInput, TContext>(\n step: PipelineStep<TInput, TContext, unknown>,\n args: PipelineStepRunArgs<TInput, TContext>,\n dryRun: boolean,\n): Promise<boolean> {\n if (dryRun && step.allowDuringDryRun !== true) {\n return true;\n }\n if (step.skip) {\n return Boolean(await step.skip(args));\n }\n return false;\n}\n","import { createPipeline } from './pipeline';\nimport type { PipelineDefinition } from './types';\n\nconst pipelines = new Map<string, ReturnType<typeof createPipeline<any, any>>>();\n\nexport function registerPipeline<TInput, TContext>(definition: PipelineDefinition<TInput, TContext>) {\n const pipeline = createPipeline(definition);\n pipelines.set(definition.name, pipeline);\n return pipeline;\n}\n\nexport function getPipeline(name: string) {\n return pipelines.get(name);\n}\n\nexport function listPipelines() {\n return Array.from(pipelines.values()).map((pipeline) => pipeline.definition);\n}\n","import { registerPipeline } from './registry';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\ninterface DiscoveryInput {\n query?: string;\n limit?: number;\n}\n\ninterface DiscoveryContext {\n results: {\n search?: unknown;\n vector?: unknown;\n };\n}\n\nconst discoveryDefinition: PipelineDefinition<DiscoveryInput, DiscoveryContext> = {\n name: 'workflow.discovery',\n description: 'Run hol.search and hol.vectorSearch to explore agents.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({ results: {} }),\n steps: [\n {\n name: 'hol.search',\n description: 'Keyword search',\n allowDuringDryRun: true,\n run: async ({ input, context }) => {\n const payload = { q: input.query, limit: input.limit ?? 5 };\n const response = await withBroker((client) => client.search(payload));\n context.results.search = response;\n return response;\n },\n },\n {\n name: 'hol.vectorSearch',\n description: 'Vector similarity search',\n allowDuringDryRun: true,\n run: async ({ input, context }) => {\n if (!input.query) {\n return undefined;\n }\n const response = await withBroker((client) => client.vectorSearch({ query: input.query, limit: input.limit ?? 5 }));\n context.results.vector = response;\n return response;\n },\n },\n ],\n};\n\nexport const discoveryPipeline = registerPipeline(discoveryDefinition);\n","import type { AgentRegistrationRequest, RegisterAgentResponse } from '@hashgraphonline/standards-sdk';\nimport { RegistryBrokerError } from '@hashgraphonline/standards-sdk';\nimport { withBroker } from '../../broker';\nimport { InsufficientCreditsError } from '../errors';\n\nexport type ShortfallResolution = 'retry' | 'abort' | void;\n\nexport interface CreditAwareRegistrationOptions {\n payload: AgentRegistrationRequest;\n onShortfall?: (quoteError: InsufficientCreditsError) => Promise<ShortfallResolution> | ShortfallResolution;\n}\n\nexport async function runCreditAwareRegistration({ payload, onShortfall }: CreditAwareRegistrationOptions) {\n while (true) {\n try {\n const response = await withBroker((client) => client.registerAgent(payload));\n return response;\n } catch (error) {\n const converted = await translateCreditError(error, payload);\n if (converted) {\n const action = (await onShortfall?.(converted)) ?? 'abort';\n if (action === 'retry') {\n continue;\n }\n throw converted;\n }\n throw error;\n }\n }\n}\n\nasync function translateCreditError(error: unknown, payload: AgentRegistrationRequest) {\n if (!(error instanceof RegistryBrokerError) || error.status !== 402) {\n return null;\n }\n const quote = await withBroker((client) => client.getRegistrationQuote(payload));\n return new InsufficientCreditsError(quote);\n}\n\nexport async function waitForRegistrationCompletion(attemptId: string) {\n return withBroker((client) =>\n client.waitForRegistrationCompletion(attemptId, {\n intervalMs: 2_000,\n timeoutMs: 5 * 60_000,\n }),\n );\n}\n\nexport async function retryWithFixedDelays<T>(fn: () => Promise<T>, attempts = 3, delayMs = 1_000) {\n let lastError: unknown;\n for (let i = 0; i < attempts; i += 1) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n if (i < attempts - 1) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n }\n throw lastError;\n}\n","import type { RegisterAgentQuoteResponse } from '@hashgraphonline/standards-sdk';\n\nexport interface CreditShortfallSummary {\n requiredCredits: number;\n availableCredits: number;\n shortfallCredits: number;\n estimatedHbar?: number | null;\n creditsPerHbar?: number | null;\n registry?: string;\n protocol?: string;\n accountId?: string | null;\n}\n\nexport class InsufficientCreditsError extends Error {\n readonly code = 'INSUFFICIENT_CREDITS';\n readonly summary: CreditShortfallSummary;\n\n constructor(quote: RegisterAgentQuoteResponse, hint?: string) {\n const shortfall = Math.max(0, quote.shortfallCredits ?? 0);\n const message = hint ?? `Insufficient registry credits (shortfall: ${shortfall})`;\n super(message);\n this.name = 'InsufficientCreditsError';\n this.summary = {\n requiredCredits: quote.requiredCredits ?? 0,\n availableCredits: quote.availableCredits ?? 0,\n shortfallCredits: shortfall,\n estimatedHbar: quote.estimatedHbar,\n creditsPerHbar: quote.creditsPerHbar,\n registry: quote.registry,\n protocol: quote.protocol,\n accountId: quote.accountId,\n };\n }\n}\n\nexport function isInsufficientCreditsError(error: unknown): error is InsufficientCreditsError {\n return error instanceof InsufficientCreditsError || Boolean(error && (error as { code?: string }).code === 'INSUFFICIENT_CREDITS');\n}\n","import type { AgentRegistrationRequest, RegisterAgentQuoteResponse } from '@hashgraphonline/standards-sdk';\nimport { registerPipeline } from './registry';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\nimport type { CreditShortfallSummary } from './errors';\nimport { runCreditAwareRegistration } from './utils/credits';\n\ninterface RegistrationInput {\n payload: AgentRegistrationRequest;\n}\n\ninterface RegistrationContext {\n payload: AgentRegistrationRequest;\n attemptId?: string;\n result?: unknown;\n uaid?: string;\n quote?: CreditShortfallSummary | RegisterAgentQuoteResponse;\n}\n\nconst registrationDefinition: PipelineDefinition<RegistrationInput, RegistrationContext> = {\n name: 'workflow.registerMcp',\n description: 'Quote, register, and wait for completion.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: ({ payload }) => ({ payload }),\n steps: [\n {\n name: 'hol.getRegistrationQuote',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const quote = await withBroker((client) => client.getRegistrationQuote(context.payload));\n context.quote = quote;\n return quote;\n },\n },\n {\n name: 'hol.registerAgent',\n run: async ({ context }) => {\n const response = await runCreditAwareRegistration({\n payload: context.payload,\n onShortfall: (err) => {\n context.quote = err.summary;\n return 'abort';\n },\n });\n if ('attemptId' in response && typeof response.attemptId === 'string') {\n context.attemptId = response.attemptId;\n }\n context.result = response;\n return response;\n },\n },\n {\n name: 'hol.waitForRegistrationCompletion',\n run: async ({ context }) => {\n if (!context.attemptId) {\n throw new Error('Registration attemptId missing.');\n }\n const result = await withBroker((client) =>\n client.waitForRegistrationCompletion(context.attemptId!, {\n intervalMs: 2_000,\n timeoutMs: 5 * 60_000,\n }),\n );\n if (result && typeof result === 'object' && 'result' in result) {\n const progress = result as { result?: Record<string, unknown> };\n const maybeUaid = progress.result?.uaid;\n if (typeof maybeUaid === 'string') {\n context.uaid = maybeUaid;\n }\n }\n return result;\n },\n },\n ],\n};\n\nexport const registrationPipeline = registerPipeline(registrationDefinition);\n","import type { AgentAuthConfig } from '@hashgraphonline/standards-sdk';\nimport { registerPipeline } from './registry';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\ninterface ChatInput {\n uaid: string;\n message?: string;\n auth?: AgentAuthConfig;\n}\n\ninterface ChatContext {\n sessionId?: string;\n uaid: string;\n transcript: unknown;\n auth?: AgentAuthConfig;\n}\n\nconst chatDefinition: PipelineDefinition<ChatInput, ChatContext> = {\n name: 'workflow.chatSmoke',\n description: 'Create a chat session, send a message, read history, compact, and close.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: ({ uaid, auth }) => ({ uaid, auth, transcript: undefined }),\n steps: [\n {\n name: 'hol.chat.createSession',\n run: async ({ context }) => {\n const response = await withBroker((client) =>\n client.chat.createSession({ uaid: context.uaid, historyTtlSeconds: 60, auth: context.auth }),\n );\n if (response?.sessionId) {\n context.sessionId = response.sessionId;\n }\n return response;\n },\n },\n {\n name: 'hol.chat.sendMessage',\n run: async ({ input, context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n return withBroker((client) =>\n client.chat.sendMessage({\n sessionId: context.sessionId!,\n message: input.message ?? 'Hello from workflow.chatSmoke',\n auth: input.auth ?? context.auth,\n }),\n );\n },\n },\n {\n name: 'hol.chat.history',\n run: async ({ context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n const history = await withBroker((client) => client.chat.getHistory(context.sessionId!));\n context.transcript = history;\n return history;\n },\n },\n {\n name: 'hol.chat.compact',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n try {\n return await withBroker((client) => client.chat.compactHistory({ sessionId: context.sessionId!, preserveEntries: 2 }));\n } catch (error) {\n const message = error instanceof Error ? error.message.toLowerCase() : '';\n if (message.includes('authenticated account required') || message.includes('insufficient credits')) {\n return { skipped: true, reason: 'history compaction requires authenticated account' };\n }\n throw error;\n }\n },\n },\n {\n name: 'hol.chat.end',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n return withBroker((client) => client.chat.endSession(context.sessionId!));\n },\n },\n ],\n};\n\nexport const chatPipeline = registerPipeline(chatDefinition);\n","import { registerPipeline } from './registry';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\ninterface OpsInput {\n inspect?: boolean;\n}\n\ninterface OpsContext {\n stats?: unknown;\n metrics?: unknown;\n dashboard?: unknown;\n}\n\nconst opsDefinition: PipelineDefinition<OpsInput, OpsContext> = {\n name: 'workflow.opsCheck',\n description: 'Run stats, metrics, dashboard, listProtocols, detectProtocol.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'hol.stats',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.stats());\n context.stats = response;\n return response;\n },\n },\n {\n name: 'hol.metricsSummary',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.metricsSummary());\n context.metrics = response;\n return response;\n },\n },\n {\n name: 'hol.dashboardStats',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.dashboardStats());\n context.dashboard = response;\n return response;\n },\n },\n {\n name: 'hol.listProtocols',\n allowDuringDryRun: true,\n run: async () => withBroker((client) => client.listProtocols()),\n },\n {\n name: 'hol.detectProtocol',\n allowDuringDryRun: true,\n run: async () =>\n withBroker((client) =>\n client.detectProtocol({\n headers: { 'content-type': 'application/json' },\n body: '{}',\n } as any),\n ),\n },\n ],\n};\n\nexport const opsPipeline = registerPipeline(opsDefinition);\n","import { registerPipeline } from './registry';\nimport type { PipelineDefinition } from './types';\nimport { discoveryPipeline } from './discovery';\nimport { registrationPipeline } from './registration';\nimport { chatPipeline } from './chat';\nimport { opsPipeline } from './ops';\nimport type { AgentRegistrationRequest } from '@hashgraphonline/standards-sdk';\n\ninterface FullWorkflowInput {\n registrationPayload: AgentRegistrationRequest;\n discoveryQuery?: string;\n chatMessage?: string;\n}\n\ninterface FullWorkflowContext {\n discovery?: unknown;\n registration?: unknown;\n chat?: unknown;\n ops?: unknown;\n uaid?: string;\n}\n\nconst fullDefinition: PipelineDefinition<FullWorkflowInput, FullWorkflowContext> = {\n name: 'workflow.fullRegistration',\n description: 'Discovery → Registration → Chat → Ops health check',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY', 'HEDERA_ACCOUNT_ID', 'HEDERA_PRIVATE_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'workflow.discovery',\n allowDuringDryRun: true,\n run: async ({ input, context }) => {\n const result = await discoveryPipeline.run({ query: input.discoveryQuery, limit: 5 });\n context.discovery = result;\n return result;\n },\n },\n {\n name: 'workflow.registerMcp',\n run: async ({ input, context, dryRun }) => {\n const payload = { payload: input.registrationPayload };\n const result = await registrationPipeline.run(payload, { dryRun });\n context.registration = result;\n context.uaid = result.context.uaid;\n return result;\n },\n },\n {\n name: 'workflow.chatSmoke',\n run: async ({ input, context, dryRun }) => {\n if (!context.uaid) throw new Error('UAID missing from registration context');\n const result = await chatPipeline.run({ uaid: context.uaid, message: input.chatMessage }, { dryRun });\n context.chat = result;\n return result;\n },\n },\n {\n name: 'workflow.opsCheck',\n allowDuringDryRun: true,\n run: async ({ context, dryRun }) => {\n const result = await opsPipeline.run({}, { dryRun });\n context.ops = result;\n return result;\n },\n },\n ],\n};\n\nexport const fullWorkflowPipeline = registerPipeline(fullDefinition);\n","import type { PipelineDefinition } from './types';\nimport { registerPipeline } from './registry';\n\ninterface WorkflowMetadata {\n name: string;\n description: string;\n version?: string;\n requiredEnv?: string[];\n}\n\nexport function scaffoldWorkflow<TInput, TContext>(definition: PipelineDefinition<TInput, TContext>) {\n if (!definition.version) {\n definition.version = '1.0.0';\n }\n if (!definition.requiredEnv) {\n definition.requiredEnv = ['REGISTRY_BROKER_API_KEY'];\n }\n return registerPipeline(definition);\n}\n\nexport function defineWorkflow<TInput, TContext>(metadata: WorkflowMetadata, steps: PipelineDefinition<TInput, TContext>['steps'], createContext: PipelineDefinition<TInput, TContext>['createContext']) {\n return scaffoldWorkflow({ ...metadata, steps, createContext });\n}\n","import { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\ninterface OpenRouterChatInput {\n modelId: string;\n registry?: string;\n message: string;\n authToken?: string;\n historyTtlSeconds?: number;\n}\n\ninterface OpenRouterChatContext {\n uaid?: string;\n sessionId?: string;\n transcript?: unknown;\n}\n\nconst openRouterChatDefinition: PipelineDefinition<OpenRouterChatInput, OpenRouterChatContext> = {\n name: 'workflow.openrouterChat',\n description: 'Discover an OpenRouter model and run a chat message against it.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'hol.search',\n run: async ({ input, context }) => {\n const result = await withBroker((client) =>\n client.search({ q: input.modelId, registries: input.registry ? [input.registry] : ['openrouter'], limit: 1 }),\n );\n if (!result.hits?.length) {\n throw new Error(`Model ${input.modelId} not found in registry ${input.registry ?? 'openrouter'}`);\n }\n context.uaid = result.hits[0].uaid;\n return result.hits[0];\n },\n },\n {\n name: 'hol.chat.createSession',\n run: async ({ input, context }) => {\n if (!context.uaid) throw new Error('UAID missing from discovery step');\n const auth = input.authToken ? { type: 'bearer' as const, token: input.authToken } : undefined;\n const response = await withBroker((client) =>\n client.chat.createSession({\n uaid: context.uaid!,\n historyTtlSeconds: input.historyTtlSeconds ?? 900,\n auth,\n }),\n );\n context.sessionId = response.sessionId;\n return response;\n },\n },\n {\n name: 'hol.chat.sendMessage',\n run: async ({ input, context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n const auth = input.authToken ? { type: 'bearer' as const, token: input.authToken } : undefined;\n return withBroker((client) =>\n client.chat.sendMessage({ sessionId: context.sessionId!, auth, message: input.message }),\n );\n },\n },\n {\n name: 'hol.chat.history',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n const history = await withBroker((client) => client.chat.getHistory(context.sessionId!));\n context.transcript = history;\n return history;\n },\n },\n {\n name: 'hol.chat.end',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n if (!context.sessionId) throw new Error('Missing chat session');\n return withBroker((client) => client.chat.endSession(context.sessionId!));\n },\n },\n ],\n};\n\nexport const openRouterChatWorkflow = scaffoldWorkflow(openRouterChatDefinition);\n","import { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\nimport { discoveryPipeline } from './discovery';\nimport { chatPipeline } from './chat';\nimport { opsPipeline } from './ops';\nimport type { AgentRegistrationRequest } from '@hashgraphonline/standards-sdk';\n\nexport interface RegistryShowcaseInput {\n query?: string;\n uaid?: string;\n message?: string;\n performCreditCheck?: boolean;\n}\n\ninterface RegistryShowcaseContext {\n discovery?: unknown;\n uaid?: string;\n listProtocols?: unknown;\n detectProtocol?: unknown;\n stats?: unknown;\n metrics?: unknown;\n dashboard?: unknown;\n websocket?: unknown;\n chat?: unknown;\n creditQuote?: unknown;\n}\n\nconst registryShowcaseDefinition: PipelineDefinition<RegistryShowcaseInput, RegistryShowcaseContext> = {\n name: 'workflow.registryBrokerShowcase',\n description: 'Discovery + analytics + chat showcase workflow inspired by registry-broker-demo.ts.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'workflow.discovery',\n allowDuringDryRun: true,\n run: async ({ input, context, dryRun }) => {\n const result = await discoveryPipeline.run({ query: input.query }, { dryRun });\n context.discovery = result;\n context.uaid = input.uaid ?? (result.steps[0]?.output as any)?.hits?.[0]?.uaid;\n return result;\n },\n },\n {\n name: 'hol.listProtocols',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.listProtocols());\n context.listProtocols = response;\n return response;\n },\n },\n {\n name: 'hol.detectProtocol',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.detectProtocol({ headers: { 'content-type': 'application/json' }, body: '{}' }));\n context.detectProtocol = response;\n return response;\n },\n },\n {\n name: 'hol.stats',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.stats());\n context.stats = response;\n return response;\n },\n },\n {\n name: 'hol.metricsSummary',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.metricsSummary());\n context.metrics = response;\n return response;\n },\n },\n {\n name: 'hol.dashboardStats',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.dashboardStats());\n context.dashboard = response;\n return response;\n },\n },\n {\n name: 'hol.websocketStats',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const response = await withBroker((client) => client.websocketStats());\n context.websocket = response;\n return response;\n },\n },\n {\n name: 'workflow.registryBrokerShowcase.chat',\n skip: ({ input, context }) => !(input.message && context.uaid),\n run: async ({ input, context, dryRun }) => {\n if (!context.uaid) throw new Error('No UAID discovered for chat');\n const result = await chatPipeline.run({ uaid: context.uaid, message: input.message }, { dryRun });\n context.chat = result;\n return result;\n },\n },\n {\n name: 'hol.getRegistrationQuote',\n skip: ({ input }) => !input.performCreditCheck,\n run: async ({ context }) => {\n const discoveryRecord =\n context.discovery && typeof context.discovery === 'object'\n ? (context.discovery as { context?: Record<string, unknown> })\n : null;\n const payload = (discoveryRecord?.context as { registrationPayload?: unknown } | undefined)?.registrationPayload ?? context.discovery;\n const response = await withBroker((client) => client.getRegistrationQuote(payload as unknown as AgentRegistrationRequest));\n context.creditQuote = response;\n return response;\n },\n },\n ],\n};\n\nexport const registryBrokerShowcaseWorkflow = scaffoldWorkflow(registryShowcaseDefinition);\n","import type { AgentAuthConfig } from '@hashgraphonline/standards-sdk';\nimport { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\ninterface BridgeInput {\n uaid: string;\n localMessage: string;\n agentverseMessage: string;\n agentverseUaid: string;\n localAuth?: AgentAuthConfig;\n agentverseAuth?: AgentAuthConfig;\n iterations?: number;\n}\n\ninterface BridgeContext {\n localSession?: string;\n agentverseSession?: string;\n transcripts: Array<{ target: 'local' | 'agentverse'; response: unknown }>;\n}\n\nconst agentverseBridgeDefinition: PipelineDefinition<BridgeInput, BridgeContext> = {\n name: 'workflow.agentverseBridge',\n description: 'Relay messages between a local UAID session and an Agentverse UAID.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({ transcripts: [] }),\n steps: [\n {\n name: 'workflow.agentverseBridge.createSessions',\n run: async ({ input, context }) => {\n const local = await withBroker((client) =>\n client.chat.createSession({ uaid: input.uaid, auth: input.localAuth, historyTtlSeconds: 300 }),\n );\n const agentverse = await withBroker((client) =>\n client.chat.createSession({ uaid: input.agentverseUaid, auth: input.agentverseAuth, historyTtlSeconds: 300 }),\n );\n context.localSession = local.sessionId;\n context.agentverseSession = agentverse.sessionId;\n return { local, agentverse };\n },\n },\n {\n name: 'workflow.agentverseBridge.relay',\n run: async ({ input, context }) => {\n if (!context.localSession || !context.agentverseSession) {\n throw new Error('Sessions missing');\n }\n const iterations = input.iterations ?? 1;\n for (let i = 0; i < iterations; i += 1) {\n const localResponse = await withBroker((client) =>\n client.chat.sendMessage({ sessionId: context.localSession!, auth: input.localAuth, message: input.localMessage }),\n );\n context.transcripts.push({ target: 'local', response: localResponse });\n const agentverseResponse = await withBroker((client) =>\n client.chat.sendMessage({ sessionId: context.agentverseSession!, auth: input.agentverseAuth, message: input.agentverseMessage }),\n );\n context.transcripts.push({ target: 'agentverse', response: agentverseResponse });\n }\n return context.transcripts;\n },\n },\n {\n name: 'workflow.agentverseBridge.history',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const localHistory = await withBroker((client) => client.chat.getHistory(context.localSession!));\n const agentverseHistory = await withBroker((client) => client.chat.getHistory(context.agentverseSession!));\n return { localHistory, agentverseHistory };\n },\n },\n {\n name: 'workflow.agentverseBridge.cleanup',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n await Promise.all([\n withBroker((client) => client.chat.endSession(context.localSession!)),\n withBroker((client) => client.chat.endSession(context.agentverseSession!)),\n ]);\n return { ended: true };\n },\n },\n ],\n};\n\nexport const agentverseBridgeWorkflow = scaffoldWorkflow(agentverseBridgeDefinition);\n","import { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\ninterface Erc8004DiscoveryInput {\n query?: string;\n limit?: number;\n}\n\ninterface Erc8004DiscoveryContext {\n hits?: unknown;\n}\n\nconst erc8004DiscoveryDefinition: PipelineDefinition<Erc8004DiscoveryInput, Erc8004DiscoveryContext> = {\n name: 'workflow.erc8004Discovery',\n description: 'Filter search/vector/namespace lookups for ERC-8004 registries.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'hol.search',\n allowDuringDryRun: true,\n run: async ({ input, context }) => {\n const response = await withBroker((client) =>\n client.search({ q: input.query, registries: ['erc-8004'], limit: input.limit ?? 10 }),\n );\n context.hits = response.hits;\n return response;\n },\n },\n {\n name: 'hol.registrySearchByNamespace',\n allowDuringDryRun: true,\n run: async ({ input }) => withBroker((client) => client.registrySearchByNamespace('erc-8004', input.query)),\n },\n ],\n};\n\nexport const erc8004DiscoveryWorkflow = scaffoldWorkflow(erc8004DiscoveryDefinition);\n","import type { AgentRegistrationRequest, AdditionalRegistryCatalogResponse } from '@hashgraphonline/standards-sdk';\nimport { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\nimport type { CreditShortfallSummary } from './errors';\nimport { runCreditAwareRegistration, waitForRegistrationCompletion } from './utils/credits';\n\ninterface CreditTopUpConfig {\n accountId: string;\n privateKey: string;\n hbarAmount?: number;\n memo?: string;\n maxRetries?: number;\n}\n\nexport interface RegisterAgentAdvancedInput {\n payload: AgentRegistrationRequest;\n additionalRegistrySelections?: string[];\n updateAdditionalRegistries?: string[];\n skipUpdate?: boolean;\n creditTopUp?: CreditTopUpConfig;\n}\n\ninterface RegisterAgentAdvancedContext {\n payload: AgentRegistrationRequest;\n resolvedRegistries: string[];\n missingRegistries: string[];\n lastQuote?: CreditShortfallSummary;\n attemptId?: string;\n uaid?: string;\n registrationResult?: unknown;\n updateResult?: unknown;\n progress?: unknown;\n catalog?: AdditionalRegistryCatalogResponse;\n}\n\nconst registerAgentAdvancedDefinition: PipelineDefinition<RegisterAgentAdvancedInput, RegisterAgentAdvancedContext> = {\n name: 'workflow.registerAgentAdvanced',\n description: 'Extended registration workflow with additional registries and optional updates.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: ({ payload }) => ({ payload, resolvedRegistries: [], missingRegistries: [] }),\n steps: [\n {\n name: 'hol.getAdditionalRegistries',\n allowDuringDryRun: true,\n skip: ({ input }) => !input.additionalRegistrySelections?.length && !input.updateAdditionalRegistries?.length,\n run: async ({ context }) => {\n const catalog = await withBroker((client) => client.getAdditionalRegistries());\n context.catalog = catalog;\n return catalog;\n },\n },\n {\n name: 'workflow.resolveAdditionalRegistries',\n allowDuringDryRun: true,\n run: async ({ input, context }) => {\n const catalog = context.catalog;\n if (!catalog) return null;\n const selections = input.additionalRegistrySelections ?? [];\n const { resolved, missing } = resolveAdditionalSelections(selections, catalog);\n context.resolvedRegistries = resolved;\n context.missingRegistries = missing;\n if (resolved.length > 0) {\n context.payload = {\n ...context.payload,\n additionalRegistries: resolved,\n };\n }\n return { resolved, missing };\n },\n },\n {\n name: 'hol.getRegistrationQuote',\n allowDuringDryRun: true,\n run: async ({ context }) => withBroker((client) => client.getRegistrationQuote(context.payload)),\n },\n {\n name: 'workflow.registerAgentAdvanced.register',\n run: async ({ input, context }) => {\n const response = await runCreditAwareRegistration({\n payload: context.payload,\n onShortfall: async (err) => {\n context.lastQuote = err.summary;\n if (!input.creditTopUp) {\n return 'abort';\n }\n await purchaseCreditsWithHbar(input.creditTopUp, err.summary);\n return 'retry';\n },\n });\n context.registrationResult = response;\n if ('attemptId' in response && typeof response.attemptId === 'string') {\n context.attemptId = response.attemptId;\n }\n if ('uaid' in response && typeof response.uaid === 'string') {\n context.uaid = response.uaid;\n }\n return response;\n },\n },\n {\n name: 'hol.waitForRegistrationCompletion',\n run: async ({ context }) => {\n if (!context.attemptId) throw new Error('Registration attemptId missing.');\n const result = await waitForRegistrationCompletion(context.attemptId);\n context.progress = result;\n if (result && typeof result === 'object' && 'result' in result) {\n const progress = result as { result?: Record<string, unknown> };\n const maybeUaid = progress.result?.uaid;\n if (typeof maybeUaid === 'string') {\n context.uaid = maybeUaid;\n }\n }\n return result;\n },\n },\n {\n name: 'workflow.registerAgentAdvanced.update',\n skip: ({ input }) => input.skipUpdate || !input.updateAdditionalRegistries?.length,\n run: async ({ input, context }) => {\n if (!context.uaid) throw new Error('UAID missing for update.');\n const resolved = input.updateAdditionalRegistries ?? [];\n const updatePayload: AgentRegistrationRequest = {\n ...context.payload,\n additionalRegistries: resolved,\n };\n const response = await withBroker((client) => client.updateAgent(context.uaid!, updatePayload));\n context.updateResult = response;\n return response;\n },\n },\n ],\n};\n\nexport const registerAgentAdvancedPipeline = scaffoldWorkflow(registerAgentAdvancedDefinition);\n\nfunction resolveAdditionalSelections(selections: string[], catalog: AdditionalRegistryCatalogResponse) {\n if (!catalog.registries || catalog.registries.length === 0) {\n return { resolved: [], missing: selections };\n }\n const resolved = new Set<string>();\n const missing: string[] = [];\n for (const selection of selections) {\n const matches = collectMatches(selection, catalog);\n if (matches.length === 0) {\n missing.push(selection);\n } else {\n matches.forEach((key) => resolved.add(key));\n }\n }\n return { resolved: Array.from(resolved), missing };\n}\n\nfunction collectMatches(selection: string, catalog: AdditionalRegistryCatalogResponse) {\n const target = selection.trim().toLowerCase();\n if (!target) return [];\n const matches: string[] = [];\n for (const registry of catalog.registries ?? []) {\n const registryId = registry.id?.toLowerCase();\n const networks = registry.networks ?? [];\n if (!registryId || networks.length === 0) continue;\n if (registryId === target) {\n networks.forEach((network) => {\n if (network?.key) {\n matches.push(network.key);\n }\n });\n continue;\n }\n for (const network of networks) {\n if (!network?.key) continue;\n const keyLower = network.key.toLowerCase();\n const networkIdLower = network.networkId?.toLowerCase();\n const labelLower = network.label?.toLowerCase();\n const nameLower = network.name?.toLowerCase();\n if (\n target === keyLower ||\n (networkIdLower && target === networkIdLower) ||\n (labelLower && target === labelLower) ||\n (nameLower && target === nameLower) ||\n target === `${registryId}:${networkIdLower}`\n ) {\n matches.push(network.key);\n }\n }\n }\n return matches;\n}\n\nasync function purchaseCreditsWithHbar(config: CreditTopUpConfig, summary: CreditShortfallSummary) {\n const hbarAmount = config.hbarAmount ?? Math.max(0.25, (summary.shortfallCredits ?? 1) / 100);\n await withBroker((client) =>\n client.purchaseCreditsWithHbar({\n accountId: config.accountId,\n privateKey: config.privateKey,\n hbarAmount,\n memo: config.memo ?? 'workflow.registerAgentAdvanced:topup',\n metadata: {\n shortfall: summary.shortfallCredits,\n requiredCredits: summary.requiredCredits,\n },\n }),\n );\n}\n","import type { AgentRegistrationRequest, AdditionalRegistryCatalogResponse, LedgerVerifyRequest } from '@hashgraphonline/standards-sdk';\nimport { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\nimport { registerAgentAdvancedPipeline, type RegisterAgentAdvancedInput } from './register-advanced';\n\nexport interface RegisterAgentErc8004Input extends RegisterAgentAdvancedInput {\n erc8004Networks?: string[];\n ledgerVerification?: LedgerVerifyRequest;\n}\n\ninterface RegisterAgentErc8004Context {\n resolvedNetworks: string[];\n missingNetworks: string[];\n advancedResult?: unknown;\n catalog?: AdditionalRegistryCatalogResponse;\n}\n\nconst registerAgentErc8004Definition: PipelineDefinition<RegisterAgentErc8004Input, RegisterAgentErc8004Context> = {\n name: 'workflow.registerAgentErc8004',\n description: 'ERC-8004-specific registration workflow with optional ledger verification.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({ resolvedNetworks: [], missingNetworks: [] }),\n steps: [\n {\n name: 'hol.getAdditionalRegistries',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const catalog = await withBroker((client) => client.getAdditionalRegistries());\n context.catalog = catalog;\n return catalog;\n },\n },\n {\n name: 'workflow.erc8004.resolveNetworks',\n allowDuringDryRun: true,\n run: async ({ input, context }) => {\n const response = context.catalog;\n if (!response) {\n context.resolvedNetworks = [];\n context.missingNetworks = [];\n return { resolved: [], missing: [] };\n }\n const selections = input.erc8004Networks?.length ? input.erc8004Networks : defaultErc8004Selections(response);\n const { resolved, missing } = resolveErc8004Selections(selections, response);\n context.resolvedNetworks = resolved;\n context.missingNetworks = missing;\n return { resolved, missing };\n },\n },\n {\n name: 'hol.ledger.authenticate',\n skip: ({ input }) => !input.ledgerVerification,\n run: async ({ input }) => withBroker((client) => client.verifyLedgerChallenge(input.ledgerVerification!)),\n },\n {\n name: 'workflow.registerAgentAdvanced',\n run: async ({ input, context, dryRun }) => {\n const advancedInput: RegisterAgentAdvancedInput = {\n payload: withAdditionalRegistries(input.payload, context.resolvedNetworks),\n additionalRegistrySelections: context.resolvedNetworks,\n updateAdditionalRegistries: input.updateAdditionalRegistries,\n skipUpdate: input.skipUpdate,\n creditTopUp: input.creditTopUp,\n };\n const result = await registerAgentAdvancedPipeline.run(advancedInput, { dryRun });\n context.advancedResult = result;\n return result;\n },\n },\n ],\n};\n\nexport const registerAgentErc8004Pipeline = scaffoldWorkflow(registerAgentErc8004Definition);\n\nfunction resolveErc8004Selections(selections: string[], catalog: AdditionalRegistryCatalogResponse) {\n if (!catalog.registries || catalog.registries.length === 0) {\n return { resolved: [], missing: selections };\n }\n const resolved = new Set<string>();\n const missing: string[] = [];\n selections.forEach((entry) => {\n const normalized = entry.trim().toLowerCase();\n if (!normalized) return;\n let matched = false;\n for (const descriptor of catalog.registries ?? []) {\n const descriptorId = descriptor.id?.toLowerCase();\n const networks = descriptor.networks ?? [];\n if (!descriptorId || !descriptorId.startsWith('erc-8004')) continue;\n for (const network of networks) {\n if (!network) continue;\n const candidates = [network.key, network.networkId, network.label, network.name]\n .map((value) => value?.toLowerCase().trim())\n .filter(Boolean);\n if (candidates.includes(normalized) || `${descriptorId}:${network.networkId?.toLowerCase()}` === normalized) {\n if (network.key) {\n resolved.add(network.key);\n }\n matched = true;\n }\n }\n }\n if (!matched) {\n missing.push(entry);\n }\n });\n return { resolved: Array.from(resolved), missing };\n}\n\nfunction defaultErc8004Selections(catalog: AdditionalRegistryCatalogResponse) {\n const defaults = catalog.registries?.find((entry) => entry.id?.toLowerCase() === 'erc-8004');\n if (!defaults || !defaults.networks) return [];\n return defaults.networks.map((network) => network?.key).filter((key): key is string => Boolean(key));\n}\n\nfunction withAdditionalRegistries(payload: AgentRegistrationRequest, networks: string[]) {\n if (networks.length === 0) return payload;\n return { ...payload, additionalRegistries: networks };\n}\n","import type { LedgerVerifyRequest, RegistryBrokerClient, JsonObject } from '@hashgraphonline/standards-sdk';\nimport { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { withBroker } from '../broker';\n\nexport interface X402TopUpInput {\n accountId: string;\n credits: number;\n usdAmount?: number;\n description?: string;\n metadata?: JsonObject;\n evmPrivateKey: string;\n network?: 'base' | 'base-sepolia';\n rpcUrl?: string;\n ledgerVerification?: LedgerVerifyRequest;\n}\n\ninterface X402TopUpContext {\n minimums?: unknown;\n ledgerVerification?: unknown;\n purchase?: unknown;\n}\n\ntype BuyCreditsWithX402Params = Parameters<RegistryBrokerClient['buyCreditsWithX402']>[0];\n\nconst x402TopUpDefinition: PipelineDefinition<X402TopUpInput, X402TopUpContext> = {\n name: 'workflow.x402TopUp',\n description: 'Buy registry credits via X402 using an EVM wallet.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'hol.ledger.authenticate',\n skip: ({ input }) => !input.ledgerVerification,\n run: async ({ input, context }) => {\n const verification = await withBroker((client) => client.verifyLedgerChallenge(input.ledgerVerification!));\n context.ledgerVerification = verification;\n return verification;\n },\n },\n {\n name: 'hol.x402.minimums',\n allowDuringDryRun: true,\n run: async ({ context }) => {\n const minimums = await withBroker((client) => client.getX402Minimums());\n context.minimums = minimums;\n return minimums;\n },\n },\n {\n name: 'hol.x402.buyCredits',\n run: async ({ input, context }) => {\n const payload: BuyCreditsWithX402Params = {\n accountId: input.accountId,\n credits: input.credits,\n usdAmount: input.usdAmount,\n description: input.description,\n metadata: input.metadata,\n evmPrivateKey: input.evmPrivateKey,\n network: input.network,\n rpcUrl: input.rpcUrl,\n };\n const purchase = await withBroker((client) => client.buyCreditsWithX402(payload));\n context.purchase = purchase;\n return purchase;\n },\n },\n ],\n};\n\nexport const x402TopUpWorkflow = scaffoldWorkflow(x402TopUpDefinition);\n","import type { AgentRegistrationRequest, LedgerVerifyRequest } from '@hashgraphonline/standards-sdk';\nimport { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { registerAgentErc8004Pipeline } from './register-erc8004';\nimport { x402TopUpWorkflow } from './x402-topup';\nimport { chatPipeline } from './chat';\n\ninterface Erc8004X402Input {\n payload: AgentRegistrationRequest;\n erc8004Networks?: string[];\n creditPurchase?: {\n accountId: string;\n credits: number;\n evmPrivateKey: string;\n ledgerVerification?: LedgerVerifyRequest;\n network?: 'base' | 'base-sepolia';\n };\n chatMessage?: string;\n}\n\nconst erc8004X402Definition: PipelineDefinition<Erc8004X402Input, Record<string, unknown>> = {\n name: 'workflow.erc8004X402',\n description: 'Register on ERC-8004 networks with X402 credit purchases and chat smoke.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'workflow.x402TopUp',\n skip: ({ input }) => !input.creditPurchase,\n run: async ({ input, dryRun }) =>\n x402TopUpWorkflow.run(\n {\n accountId: input.creditPurchase!.accountId,\n credits: input.creditPurchase!.credits,\n evmPrivateKey: input.creditPurchase!.evmPrivateKey,\n network: input.creditPurchase!.network,\n ledgerVerification: input.creditPurchase!.ledgerVerification,\n },\n { dryRun },\n ),\n },\n {\n name: 'workflow.registerAgentErc8004',\n run: async ({ input, dryRun }) =>\n registerAgentErc8004Pipeline.run(\n {\n payload: input.payload,\n erc8004Networks: input.erc8004Networks,\n creditTopUp: undefined,\n },\n { dryRun },\n ),\n },\n {\n name: 'workflow.erc8004X402.chat',\n skip: ({ input }) => !input.chatMessage,\n run: async ({ input, context, dryRun }) => {\n const uaid = (context?.context as any)?.registrationResult?.context?.uaid;\n if (!uaid) throw new Error('UAID missing after registration');\n return chatPipeline.run({ uaid, message: input.chatMessage }, { dryRun });\n },\n },\n ],\n};\n\nexport const erc8004X402Workflow = scaffoldWorkflow(erc8004X402Definition);\n","import type { AgentRegistrationRequest, LedgerVerifyRequest } from '@hashgraphonline/standards-sdk';\nimport { scaffoldWorkflow } from './scaffold';\nimport type { PipelineDefinition } from './types';\nimport { x402TopUpWorkflow } from './x402-topup';\nimport { registerAgentAdvancedPipeline } from './register-advanced';\nimport { chatPipeline } from './chat';\n\ninterface X402RegistrationInput {\n payload: AgentRegistrationRequest;\n x402: {\n accountId: string;\n credits: number;\n evmPrivateKey: string;\n ledgerVerification?: LedgerVerifyRequest;\n };\n chatMessage?: string;\n}\n\nconst x402RegistrationDefinition: PipelineDefinition<X402RegistrationInput, Record<string, unknown>> = {\n name: 'workflow.x402Registration',\n description: 'Full agent registration funded via X402 credits with chat validation.',\n version: '1.0.0',\n requiredEnv: ['REGISTRY_BROKER_API_KEY'],\n createContext: () => ({}),\n steps: [\n {\n name: 'workflow.x402TopUp',\n run: async ({ input, dryRun }) =>\n x402TopUpWorkflow.run(\n {\n accountId: input.x402.accountId,\n credits: input.x402.credits,\n evmPrivateKey: input.x402.evmPrivateKey,\n ledgerVerification: input.x402.ledgerVerification,\n },\n { dryRun },\n ),\n },\n {\n name: 'workflow.registerAgentAdvanced',\n run: async ({ input, dryRun }) => registerAgentAdvancedPipeline.run({ payload: input.payload }, { dryRun }),\n },\n {\n name: 'workflow.x402Registration.chat',\n skip: ({ input }) => !input.chatMessage,\n run: async ({ input, context, dryRun }) => {\n const uaid = (context.context as any)?.registrationResult?.context?.uaid;\n if (!uaid) throw new Error('UAID missing after registration');\n return chatPipeline.run({ uaid, message: input.chatMessage }, { dryRun });\n },\n },\n ],\n};\n\nexport const x402RegistrationWorkflow = scaffoldWorkflow(x402RegistrationDefinition);\n","import { runSSE, runStdio } from './transports';\nimport { logger } from './logger';\n\nconst transport = (process.env.MCP_TRANSPORT ?? 'sse').toLowerCase();\n\nif (transport === 'stdio') {\n logger.info({ transport }, 'starting MCP server');\n runStdio().catch((err) => {\n logger.error({ err }, 'Failed to start stdio transport');\n process.exitCode = 1;\n });\n} else {\n logger.info({ transport }, 'starting MCP server');\n runSSE().catch((err) => {\n logger.error({ err }, 'Failed to start SSE transport');\n process.exitCode = 1;\n });\n}\n"],"mappings":"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","names":["randomUUID","RegistryBrokerError","z","z","RegistryBrokerError","RegistryBrokerError","config","normalized","z","payload","RegistryBrokerError","randomUUID"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hol-org/hashnet-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.19",
|
|
4
4
|
"description": "HOL MCP server for agentic search, discovery, registration, chat, and more with the Hashgraph Online Registry Broker.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|