@hol-org/hashnet-mcp 1.0.10 → 1.0.11

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 CHANGED
@@ -38,14 +38,17 @@ Claude Desktop (stdio):
38
38
 
39
39
  ```json
40
40
  {
41
- "mcpServers": {
42
- "hashgraph-standards": {
43
- "command": "pnpm",
44
- "args": ["dev:stdio"],
45
- "env": {
46
- "REGISTRY_BROKER_API_URL": "https://registry.hashgraphonline.com/api/v1",
47
- "REGISTRY_BROKER_API_KEY": "YOUR_KEY"
48
- }
41
+ "hashnet": {
42
+ "type": "stdio",
43
+ "command": "npx",
44
+ "args": [
45
+ "-y",
46
+ "@hol-org/hashnet-mcp",
47
+ "up"
48
+ ],
49
+ "env": {
50
+ "REGISTRY_BROKER_API_KEY": "x",
51
+ "REGISTRY_BROKER_API_URL": "https://registry.hashgraphonline.com/api/v1"
49
52
  }
50
53
  }
51
54
  }
@@ -53,6 +56,8 @@ Claude Desktop (stdio):
53
56
 
54
57
  Claude Code / Cursor (HTTP streaming): point the client at `https://<host>/mcp/stream` once deployed (see `deploy/README.md`). Use `pnpm dev:sse` locally to expose the same endpoint at `http://localhost:3333/mcp/stream`. SSE fallback remains available at `/mcp/sse` for clients that still require it.
55
58
 
59
+ Local CLI runner (no global install): `pnpm cli:up -- --transport sse` (runs TS directly). Built bundle: `pnpm build && node dist/cli/up.js up --transport sse`. Global/NPX: `npx @hol-org/hashnet-mcp up --transport sse`.
60
+
56
61
  #### Claude Code auto-install
57
62
  - `pnpm claude:install --endpoint http://localhost:3333/mcp/stream` — adds/updates the MCP entry inside Claude Code’s config (`~/Library/Application Support/Claude/claude_code_config.json` on macOS; `%APPDATA%\Claude\claude_code_config.json` on Windows; `~/.config/Claude/claude_code_config.json` on Linux).
58
63
  - Pass `--name <id>` to customize the MCP server handle or `--config <path>` if your Claude Code build stores config elsewhere.
package/dist/index.js CHANGED
@@ -6,13 +6,13 @@ import { PassThrough } from "stream";
6
6
  // src/mcp.ts
7
7
  import { randomUUID } from "crypto";
8
8
  import {
9
- RegistryBrokerError as RegistryBrokerError2
9
+ RegistryBrokerError as RegistryBrokerError3
10
10
  } from "@hashgraphonline/standards-sdk";
11
11
  import { FastMCP } from "fastmcp";
12
12
  import { z as z3 } from "zod";
13
13
 
14
14
  // src/broker.ts
15
- import { RegistryBrokerClient } from "@hashgraphonline/standards-sdk";
15
+ import { RegistryBrokerClient, RegistryBrokerError } from "@hashgraphonline/standards-sdk";
16
16
  import Bottleneck from "bottleneck";
17
17
  import IORedis from "ioredis";
18
18
  import { fetch as undiciFetch } from "undici";
@@ -148,11 +148,21 @@ function createLimiter() {
148
148
  }
149
149
  return new Bottleneck(limiterOptions);
150
150
  }
151
- async function withBroker(task) {
151
+ async function withBroker(task, label) {
152
+ const run = async () => {
153
+ if (!config.registryBrokerApiKey) {
154
+ throw new Error("REGISTRY_BROKER_API_KEY is required to call the registry broker. Set it in your environment or .env file.");
155
+ }
156
+ try {
157
+ return await task(broker);
158
+ } catch (error) {
159
+ throw formatBrokerError(error, label);
160
+ }
161
+ };
152
162
  if (brokerLimiter) {
153
- return brokerLimiter.schedule(() => task(broker));
163
+ return brokerLimiter.schedule(run);
154
164
  }
155
- return task(broker);
165
+ return run();
156
166
  }
157
167
  async function getCreditBalance(accountId) {
158
168
  if (!config.registryBrokerApiKey) {
@@ -188,6 +198,15 @@ async function safeReadBody(response) {
188
198
  return void 0;
189
199
  }
190
200
  }
201
+ function formatBrokerError(error, label) {
202
+ if (error instanceof RegistryBrokerError) {
203
+ const body = typeof error.body === "object" ? JSON.stringify(error.body) : error.body ? String(error.body) : "no response body";
204
+ const statusText = error.statusText ? ` ${error.statusText}` : "";
205
+ const prefix = label ? `${label} failed` : "Registry broker request failed";
206
+ return new Error(`${prefix} (${error.status}${statusText}): ${body}`);
207
+ }
208
+ return error instanceof Error ? error : new Error(String(error));
209
+ }
191
210
 
192
211
  // src/logger.ts
193
212
  import pino from "pino";
@@ -399,7 +418,7 @@ var discoveryDefinition = {
399
418
  var discoveryPipeline = registerPipeline(discoveryDefinition);
400
419
 
401
420
  // src/workflows/utils/credits.ts
402
- import { RegistryBrokerError } from "@hashgraphonline/standards-sdk";
421
+ import { RegistryBrokerError as RegistryBrokerError2 } from "@hashgraphonline/standards-sdk";
403
422
 
404
423
  // src/workflows/errors.ts
405
424
  var InsufficientCreditsError = class extends Error {
@@ -443,7 +462,7 @@ async function runCreditAwareRegistration({ payload, onShortfall }) {
443
462
  }
444
463
  }
445
464
  async function translateCreditError(error, payload) {
446
- if (!(error instanceof RegistryBrokerError) || error.status !== 402) {
465
+ if (!(error instanceof RegistryBrokerError2) || error.status !== 402) {
447
466
  return null;
448
467
  }
449
468
  const quote = await withBroker((client) => client.getRegistrationQuote(payload));
@@ -1304,7 +1323,7 @@ var connectionInstructions = [
1304
1323
  "You expose the Hashgraph Online Registry Broker via hol.* primitives and workflow.* pipelines. Prefer workflow.* when possible\u2014they bundle common steps and return a pipeline summary plus full results.",
1305
1324
  "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.",
1306
1325
  "Registration: workflow.registerMcp (quote \u2192 register \u2192 wait) is the default; workflow.fullRegistration adds discovery/chat/ops. hol.registerAgent + hol.waitForRegistrationCompletion are the lower-level primitives.",
1307
- "Chat: call hol.resolveUaid if the UAID is unverified, then hol.chat.createSession (include auth if provided) followed by hol.chat.sendMessage. Use hol.chat.history/compact/end to manage the session.",
1326
+ "Chat: call hol.resolveUaid if the UAID is unverified, then hol.chat.createSession (uaid or agentUrl + optional auth) followed by hol.chat.sendMessage (sessionId or uaid/agentUrl). Use hol.chat.history/compact/end to manage the session.",
1308
1327
  "Operations: workflow.opsCheck or hol.stats/hol.metricsSummary/hol.dashboardStats show registry health; hol.listProtocols + hol.detectProtocol help route third-party requests.",
1309
1328
  "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.",
1310
1329
  "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.",
@@ -1320,14 +1339,26 @@ var agentAuthSchema = z3.object({
1320
1339
  headers: z3.record(z3.string(), z3.string()).optional()
1321
1340
  }).partial();
1322
1341
  var chatSessionSchema = z3.object({
1323
- uaid: z3.string().min(1),
1342
+ uaid: z3.string().min(1).optional(),
1343
+ agentUrl: z3.string().url().optional(),
1324
1344
  historyTtlSeconds: z3.number().int().positive().optional(),
1325
1345
  auth: agentAuthSchema.optional()
1346
+ }).superRefine((value, ctx) => {
1347
+ if (!value.uaid && !value.agentUrl) {
1348
+ ctx.addIssue({ code: z3.ZodIssueCode.custom, message: "uaid or agentUrl is required" });
1349
+ }
1326
1350
  });
1327
1351
  var chatMessageSchema = z3.object({
1328
- sessionId: z3.string().min(1),
1352
+ sessionId: z3.string().min(1).optional(),
1353
+ uaid: z3.string().min(1).optional(),
1354
+ agentUrl: z3.string().url().optional(),
1329
1355
  message: z3.string().min(1),
1356
+ streaming: z3.boolean().optional(),
1330
1357
  auth: agentAuthSchema.optional()
1358
+ }).superRefine((value, ctx) => {
1359
+ if (!value.sessionId && !value.uaid && !value.agentUrl) {
1360
+ ctx.addIssue({ code: z3.ZodIssueCode.custom, message: "Provide sessionId for existing chats or uaid/agentUrl to start a new one." });
1361
+ }
1331
1362
  });
1332
1363
  var chatCompactSchema = z3.object({
1333
1364
  sessionId: z3.string().min(1),
@@ -1445,13 +1476,13 @@ var toolDefinitions = [
1445
1476
  name: "hol.search",
1446
1477
  description: "Keyword search for agents or MCP servers with filtering controls.",
1447
1478
  schema: searchInput,
1448
- handler: (input) => withBroker((client) => client.search(input))
1479
+ handler: (input) => withBroker((client) => client.search(input), "hol.search")
1449
1480
  },
1450
1481
  {
1451
1482
  name: "hol.vectorSearch",
1452
1483
  description: "Vector similarity search across registered agents.",
1453
1484
  schema: vectorSearchInput,
1454
- handler: (input) => withBroker((client) => client.vectorSearch(input))
1485
+ handler: (input) => withBroker((client) => client.vectorSearch(input), "hol.vectorSearch")
1455
1486
  },
1456
1487
  {
1457
1488
  name: "hol.resolveUaid",
@@ -1464,25 +1495,25 @@ var toolDefinitions = [
1464
1495
  client.getUaidConnectionStatus(uaid)
1465
1496
  ]);
1466
1497
  return { resolved, validation, status };
1467
- })
1498
+ }, "hol.resolveUaid")
1468
1499
  },
1469
1500
  {
1470
1501
  name: "hol.closeUaidConnection",
1471
1502
  description: "Force-close any open UAID connection.",
1472
1503
  schema: uaidInput,
1473
- handler: ({ uaid }) => withBroker((client) => client.closeUaidConnection(uaid))
1504
+ handler: ({ uaid }) => withBroker((client) => client.closeUaidConnection(uaid), "hol.closeUaidConnection")
1474
1505
  },
1475
1506
  {
1476
1507
  name: "hol.getRegistrationQuote",
1477
1508
  description: "Estimate fees for a given agent registration payload.",
1478
1509
  schema: registrationPayload,
1479
- handler: ({ payload }) => withBroker((client) => client.getRegistrationQuote(payload))
1510
+ handler: ({ payload }) => withBroker((client) => client.getRegistrationQuote(payload), "hol.getRegistrationQuote")
1480
1511
  },
1481
1512
  {
1482
1513
  name: "hol.registerAgent",
1483
1514
  description: "Submit an HCS-11-compatible agent registration.",
1484
1515
  schema: registrationPayload,
1485
- handler: ({ payload }) => withBroker((client) => client.registerAgent(payload))
1516
+ handler: ({ payload }) => withBroker((client) => client.registerAgent(payload), "hol.registerAgent")
1486
1517
  },
1487
1518
  {
1488
1519
  name: "hol.waitForRegistrationCompletion",
@@ -1492,110 +1523,135 @@ var toolDefinitions = [
1492
1523
  (client) => client.waitForRegistrationCompletion(attemptId, {
1493
1524
  intervalMs,
1494
1525
  timeoutMs
1495
- })
1526
+ }),
1527
+ "hol.waitForRegistrationCompletion"
1496
1528
  )
1497
1529
  },
1498
1530
  {
1499
1531
  name: "hol.updateAgent",
1500
1532
  description: "Update an existing agent registration payload.",
1501
1533
  schema: updateAgentInput,
1502
- handler: ({ uaid, payload }) => withBroker((client) => client.updateAgent(uaid, payload))
1534
+ handler: ({ uaid, payload }) => withBroker((client) => client.updateAgent(uaid, payload), "hol.updateAgent")
1503
1535
  },
1504
1536
  {
1505
1537
  name: "hol.additionalRegistries",
1506
1538
  description: "Retrieve the catalog of additional registries and networks.",
1507
1539
  schema: emptyObject,
1508
- handler: () => withBroker((client) => client.getAdditionalRegistries())
1540
+ handler: () => withBroker((client) => client.getAdditionalRegistries(), "hol.additionalRegistries")
1509
1541
  },
1510
1542
  {
1511
1543
  name: "hol.registrySearchByNamespace",
1512
1544
  description: "Search within a specific registry namespace.",
1513
1545
  schema: registryNamespaceInput,
1514
- handler: ({ registry, query }) => withBroker((client) => client.registrySearchByNamespace(registry, query))
1546
+ handler: ({ registry, query }) => withBroker((client) => client.registrySearchByNamespace(registry, query), "hol.registrySearchByNamespace")
1515
1547
  },
1516
1548
  {
1517
1549
  name: "hol.chat.createSession",
1518
1550
  description: "Open a chat session linked to a UAID.",
1519
1551
  schema: chatSessionSchema,
1520
- handler: (input) => withBroker((client) => client.chat.createSession(input))
1552
+ handler: (input) => withBroker((client) => client.chat.createSession(input), "hol.chat.createSession")
1521
1553
  },
1522
1554
  {
1523
1555
  name: "hol.chat.sendMessage",
1524
1556
  description: "Send a message to an active chat session.",
1525
1557
  schema: chatMessageSchema,
1526
- handler: (input) => withBroker((client) => client.chat.sendMessage(input))
1558
+ handler: (input) => withBroker(async (client) => {
1559
+ if (input.sessionId) {
1560
+ return client.chat.sendMessage(input);
1561
+ }
1562
+ const uaid = input.uaid;
1563
+ const agentUrl = input.agentUrl;
1564
+ if (!uaid && !agentUrl) {
1565
+ throw new Error("sessionId missing; provide uaid or agentUrl so a session can be created before sending.");
1566
+ }
1567
+ const session = await client.chat.createSession({
1568
+ uaid,
1569
+ agentUrl,
1570
+ auth: input.auth
1571
+ });
1572
+ const sessionId = session.sessionId ?? session.id;
1573
+ if (!sessionId) {
1574
+ throw new Error("Unable to determine sessionId from broker response when auto-creating chat session.");
1575
+ }
1576
+ return client.chat.sendMessage({
1577
+ sessionId,
1578
+ message: input.message,
1579
+ auth: input.auth,
1580
+ streaming: input.streaming
1581
+ });
1582
+ }, "hol.chat.sendMessage")
1527
1583
  },
1528
1584
  {
1529
1585
  name: "hol.chat.history",
1530
1586
  description: "Retrieve the message history for a chat session.",
1531
1587
  schema: sessionIdInput,
1532
- handler: ({ sessionId }) => withBroker((client) => client.chat.getHistory(sessionId))
1588
+ handler: ({ sessionId }) => withBroker((client) => client.chat.getHistory(sessionId), "hol.chat.history")
1533
1589
  },
1534
1590
  {
1535
1591
  name: "hol.chat.compact",
1536
1592
  description: "Compact chat history while preserving the latest entries.",
1537
1593
  schema: chatCompactSchema,
1538
- handler: (input) => withBroker((client) => client.chat.compactHistory(input))
1594
+ handler: (input) => withBroker((client) => client.chat.compactHistory(input), "hol.chat.compact")
1539
1595
  },
1540
1596
  {
1541
1597
  name: "hol.chat.end",
1542
1598
  description: "End a chat session and release broker resources.",
1543
1599
  schema: sessionIdInput,
1544
- handler: ({ sessionId }) => withBroker((client) => client.chat.endSession(sessionId))
1600
+ handler: ({ sessionId }) => withBroker((client) => client.chat.endSession(sessionId), "hol.chat.end")
1545
1601
  },
1546
1602
  {
1547
1603
  name: "hol.listProtocols",
1548
1604
  description: "List all registered protocols/adapters known to the broker.",
1549
1605
  schema: emptyObject,
1550
- handler: () => runBrokerCall("hol.listProtocols", () => withBroker((client) => client.listProtocols()))
1606
+ handler: () => runBrokerCall("hol.listProtocols", () => withBroker((client) => client.listProtocols(), "hol.listProtocols"))
1551
1607
  },
1552
1608
  {
1553
1609
  name: "hol.detectProtocol",
1554
1610
  description: "Detect the expected protocol for an inbound request payload.",
1555
1611
  schema: detectProtocolInput,
1556
- handler: (input) => runBrokerCall("hol.detectProtocol", () => withBroker((client) => client.detectProtocol(input)))
1612
+ handler: (input) => runBrokerCall("hol.detectProtocol", () => withBroker((client) => client.detectProtocol(input), "hol.detectProtocol"))
1557
1613
  },
1558
1614
  {
1559
1615
  name: "hol.stats",
1560
1616
  description: "High-level registry statistics and usage metrics.",
1561
1617
  schema: emptyObject,
1562
- handler: () => withBroker((client) => client.stats())
1618
+ handler: () => withBroker((client) => client.stats(), "hol.stats")
1563
1619
  },
1564
1620
  {
1565
1621
  name: "hol.metricsSummary",
1566
1622
  description: "Aggregated broker metrics suitable for dashboards.",
1567
1623
  schema: emptyObject,
1568
- handler: () => withBroker((client) => client.metricsSummary())
1624
+ handler: () => withBroker((client) => client.metricsSummary(), "hol.metricsSummary")
1569
1625
  },
1570
1626
  {
1571
1627
  name: "hol.dashboardStats",
1572
1628
  description: "Detailed dashboard statistics from the broker.",
1573
1629
  schema: emptyObject,
1574
- handler: () => withBroker((client) => client.dashboardStats())
1630
+ handler: () => withBroker((client) => client.dashboardStats(), "hol.dashboardStats")
1575
1631
  },
1576
1632
  {
1577
1633
  name: "hol.websocketStats",
1578
1634
  description: "Retrieve websocket connection counts and throughput.",
1579
1635
  schema: emptyObject,
1580
- handler: () => withBroker((client) => client.websocketStats())
1636
+ handler: () => withBroker((client) => client.websocketStats(), "hol.websocketStats")
1581
1637
  },
1582
1638
  {
1583
1639
  name: "hol.ledger.challenge",
1584
1640
  description: "Create a ledger challenge message for account verification.",
1585
1641
  schema: ledgerChallengeInput,
1586
- handler: (input) => withBroker((client) => client.createLedgerChallenge(input))
1642
+ handler: (input) => withBroker((client) => client.createLedgerChallenge(input), "hol.ledger.challenge")
1587
1643
  },
1588
1644
  {
1589
1645
  name: "hol.ledger.authenticate",
1590
1646
  description: "Verify a signed ledger challenge (sets ledger API key).",
1591
1647
  schema: ledgerVerifyInput,
1592
- handler: (input) => withBroker((client) => client.verifyLedgerChallenge(input))
1648
+ handler: (input) => withBroker((client) => client.verifyLedgerChallenge(input), "hol.ledger.authenticate")
1593
1649
  },
1594
1650
  {
1595
1651
  name: "hol.purchaseCredits.hbar",
1596
1652
  description: "Purchase registry credits using HBAR funds.",
1597
1653
  schema: purchaseHbarInput,
1598
- handler: (input) => withBroker((client) => client.purchaseCreditsWithHbar(input))
1654
+ handler: (input) => withBroker((client) => client.purchaseCreditsWithHbar(input), "hol.purchaseCredits.hbar")
1599
1655
  },
1600
1656
  {
1601
1657
  name: "hol.credits.balance",
@@ -1619,13 +1675,13 @@ var toolDefinitions = [
1619
1675
  name: "hol.x402.minimums",
1620
1676
  description: "Fetch the minimum credit purchase requirements for X402.",
1621
1677
  schema: emptyObject,
1622
- handler: () => withBroker((client) => client.getX402Minimums())
1678
+ handler: () => withBroker((client) => client.getX402Minimums(), "hol.x402.minimums")
1623
1679
  },
1624
1680
  {
1625
1681
  name: "hol.x402.buyCredits",
1626
1682
  description: "Buy registry credits via X402 using an EVM private key.",
1627
1683
  schema: buyX402Input,
1628
- handler: (input) => withBroker((client) => client.buyCreditsWithX402(input))
1684
+ handler: (input) => withBroker((client) => client.buyCreditsWithX402(input), "hol.x402.buyCredits")
1629
1685
  },
1630
1686
  {
1631
1687
  name: "workflow.discovery",
@@ -1816,7 +1872,7 @@ async function runBrokerCall(label, fn) {
1816
1872
  try {
1817
1873
  return await fn();
1818
1874
  } catch (error) {
1819
- if (error instanceof RegistryBrokerError2) {
1875
+ if (error instanceof RegistryBrokerError3) {
1820
1876
  const body = typeof error.body === "object" ? JSON.stringify(error.body) : String(error.body);
1821
1877
  throw new Error(`${label} failed (${error.status} ${error.statusText ?? ""}): ${body}`);
1822
1878
  }
@@ -1862,7 +1918,7 @@ mcp.addResource({
1862
1918
  "Prefer workflow.* pipelines when available\u2014they run multiple broker calls and return both a text summary and structured results:",
1863
1919
  "- Discovery: workflow.discovery { query?, limit? } (or hol.search / hol.vectorSearch).",
1864
1920
  "- Registration: workflow.registerMcp { payload } (quote \u2192 register \u2192 wait) or workflow.fullRegistration to add discovery/chat/ops.",
1865
- "- Chat: hol.chat.createSession { uaid, auth? } \u2192 hol.chat.sendMessage { sessionId, message, auth? } \u2192 hol.chat.history/compact/end.",
1921
+ "- Chat: hol.chat.createSession { uaid or agentUrl, auth?, historyTtlSeconds? } \u2192 hol.chat.sendMessage { sessionId OR (uaid/agentUrl), message, auth?, streaming? } \u2192 hol.chat.history/compact/end.",
1866
1922
  "- UAID validation/resets: hol.resolveUaid { uaid }, hol.closeUaidConnection { uaid }.",
1867
1923
  "- Ops/metrics: workflow.opsCheck or hol.stats / hol.metricsSummary / hol.dashboardStats.",
1868
1924
  "- Credits: hol.credits.balance first, then hol.purchaseCredits.hbar or hol.x402.buyCredits (X402 requires evmPrivateKey; call hol.x402.minimums to inspect limits).",
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 (include auth if provided) followed by hol.chat.sendMessage. 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}) as z.ZodType<ChatCreateSessionPayload>;\n\nconst chatMessageSchema: z.ZodType<ChatSendMessagePayload> = z.object({\n sessionId: z.string().min(1),\n message: z.string().min(1),\n auth: agentAuthSchema.optional(),\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)),\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)),\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 }),\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)),\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)),\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)),\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 ),\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)),\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()),\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)),\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)),\n },\n {\n name: 'hol.chat.sendMessage',\n description: 'Send a message to an active chat session.',\n schema: chatMessageSchema,\n handler: (input) => withBroker((client) => client.chat.sendMessage(input)),\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)),\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)),\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)),\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())),\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))),\n },\n {\n name: 'hol.stats',\n description: 'High-level registry statistics and usage metrics.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.stats()),\n },\n {\n name: 'hol.metricsSummary',\n description: 'Aggregated broker metrics suitable for dashboards.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.metricsSummary()),\n },\n {\n name: 'hol.dashboardStats',\n description: 'Detailed dashboard statistics from the broker.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.dashboardStats()),\n },\n {\n name: 'hol.websocketStats',\n description: 'Retrieve websocket connection counts and throughput.',\n schema: emptyObject,\n handler: () => withBroker((client) => client.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)),\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)),\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)),\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()),\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)),\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? } → hol.chat.sendMessage { sessionId, message, auth? } → 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 } from '@hashgraphonline/standards-sdk';\nimport Bottleneck from 'bottleneck';\nimport IORedis from 'ioredis';\nimport { fetch as undiciFetch } from 'undici';\nimport { config } from './config';\n\nconst broker = new RegistryBrokerClient({\n baseUrl: config.registryBrokerUrl,\n apiKey: config.registryBrokerApiKey,\n registrationAutoTopUp: config.autoTopUpEnabled\n ? {\n accountId: config.hederaAccountId!,\n privateKey: config.hederaPrivateKey!,\n memo: 'mcp-autotopup',\n }\n : undefined,\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>): Promise<T> {\n if (brokerLimiter) {\n return brokerLimiter.schedule(() => task(broker));\n }\n return task(broker);\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","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 return withBroker((client) => client.chat.compactHistory({ sessionId: context.sessionId!, preserveEntries: 2 }));\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({ uaid: context.uaid!, historyTtlSeconds: input.historyTtlSeconds ?? 900, auth }),\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","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 {\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 or agentUrl + optional auth) followed by hol.chat.sendMessage (sessionId or uaid/agentUrl). 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 or agentUrl is required' });\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/agentUrl 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 const agentUrl = (input as any).agentUrl;\n if (!uaid && !agentUrl) {\n throw new Error('sessionId missing; provide uaid or agentUrl so a session can be created before sending.');\n }\n\n // Auto-create a session when callers only supply a UAID/agentUrl.\n const session = await client.chat.createSession({\n uaid,\n agentUrl,\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 or agentUrl, auth?, historyTtlSeconds? } → hol.chat.sendMessage { sessionId OR (uaid/agentUrl), 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 broker = new RegistryBrokerClient({\n baseUrl: config.registryBrokerUrl,\n apiKey: config.registryBrokerApiKey,\n registrationAutoTopUp: config.autoTopUpEnabled\n ? {\n accountId: config.hederaAccountId!,\n privateKey: config.hederaPrivateKey!,\n memo: 'mcp-autotopup',\n }\n : undefined,\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 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) {\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 return withBroker((client) => client.chat.compactHistory({ sessionId: context.sessionId!, preserveEntries: 2 }));\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({ uaid: context.uaid!, historyTtlSeconds: input.historyTtlSeconds ?? 900, auth }),\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"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hol-org/hashnet-mcp",
3
- "version": "1.0.10",
4
- "description": "FastMCP server exposing Hashgraph Online Registry Broker tooling.",
3
+ "version": "1.0.11",
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",
7
7
  "module": "./dist/index.js",
@@ -84,6 +84,7 @@
84
84
  "scripts": {
85
85
  "dev:stdio": "MCP_TRANSPORT=stdio tsx src/index.ts",
86
86
  "dev:sse": "tsx src/index.ts",
87
+ "cli:up": "tsx src/cli/up.ts",
87
88
  "build": "tsup --config tsup.config.ts",
88
89
  "start": "node dist/index.js",
89
90
  "quickstart": "tsx scripts/quickstart.ts",