@hol-org/hashnet-mcp 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/up.js +10 -15
- package/dist/cli/up.js.map +1 -1
- package/dist/index.js +14 -11
- package/dist/index.js.map +1 -1
- package/package.json +22 -23
package/dist/cli/up.js
CHANGED
|
@@ -7,9 +7,6 @@ import path from "path";
|
|
|
7
7
|
import { fileURLToPath } from "url";
|
|
8
8
|
var dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
9
9
|
var projectRoot = path.resolve(dirname, "../..");
|
|
10
|
-
var log = (message) => {
|
|
11
|
-
console.error(message);
|
|
12
|
-
};
|
|
13
10
|
var args = process.argv.slice(2);
|
|
14
11
|
var command = args[0];
|
|
15
12
|
if (!command || command === "--help" || command === "-h") {
|
|
@@ -24,6 +21,9 @@ if (command !== "up") {
|
|
|
24
21
|
var flags = parseFlags(args.slice(1));
|
|
25
22
|
var transport = (flags.transport ?? "stdio").toLowerCase();
|
|
26
23
|
var installOnly = Boolean(flags["install-only"]);
|
|
24
|
+
var preferStderr = transport === "stdio";
|
|
25
|
+
var logInfo = (...messages) => preferStderr ? console.error(...messages) : console.log(...messages);
|
|
26
|
+
var logWarn = (...messages) => preferStderr ? console.error(...messages) : console.warn(...messages);
|
|
27
27
|
try {
|
|
28
28
|
ensureNodeVersion();
|
|
29
29
|
const packageManager = detectPackageManager();
|
|
@@ -31,7 +31,7 @@ try {
|
|
|
31
31
|
installDependencies(packageManager);
|
|
32
32
|
ensureEnvFile();
|
|
33
33
|
if (installOnly) {
|
|
34
|
-
|
|
34
|
+
logInfo("Dependencies installed. Skipping server launch (--install-only set).");
|
|
35
35
|
process.exit(0);
|
|
36
36
|
}
|
|
37
37
|
runServer(packageManager, transport);
|
|
@@ -78,12 +78,12 @@ function detectPackageManager() {
|
|
|
78
78
|
if (commandExists("pnpm")) {
|
|
79
79
|
return "pnpm";
|
|
80
80
|
}
|
|
81
|
-
|
|
81
|
+
logWarn("pnpm not detected. Attempting to enable via corepack...");
|
|
82
82
|
const enabled = spawnSync("corepack", ["enable", "pnpm"], { stdio: "inherit" });
|
|
83
83
|
if (enabled.status === 0 && commandExists("pnpm")) {
|
|
84
84
|
return "pnpm";
|
|
85
85
|
}
|
|
86
|
-
|
|
86
|
+
logWarn("Falling back to npm. Install pnpm globally for faster installs.");
|
|
87
87
|
return "npm";
|
|
88
88
|
}
|
|
89
89
|
function commandExists(bin) {
|
|
@@ -95,12 +95,7 @@ function commandExists(bin) {
|
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
function installDependencies(pm) {
|
|
98
|
-
|
|
99
|
-
if (existsSync(nodeModulesPath) && !process.env.FORCE_INSTALL) {
|
|
100
|
-
log("Dependencies detected; skipping install (set FORCE_INSTALL=1 to override).");
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
log(`Installing dependencies with ${pm}...`);
|
|
98
|
+
logInfo(`Installing dependencies with ${pm}...`);
|
|
104
99
|
const baseEnv = {
|
|
105
100
|
...process.env,
|
|
106
101
|
NODE_OPTIONS: process.env.NODE_OPTIONS ?? "--max-old-space-size=8192"
|
|
@@ -136,7 +131,7 @@ function ensureEnvFile() {
|
|
|
136
131
|
const examplePath = path.join(projectRoot, ".env.example");
|
|
137
132
|
if (!existsSync(envPath) && existsSync(examplePath)) {
|
|
138
133
|
copyFileSync(examplePath, envPath);
|
|
139
|
-
|
|
134
|
+
logInfo("Created .env from .env.example. Remember to fill in your credentials.");
|
|
140
135
|
}
|
|
141
136
|
}
|
|
142
137
|
function runServer(pm, transport2) {
|
|
@@ -146,7 +141,7 @@ function runServer(pm, transport2) {
|
|
|
146
141
|
const distEntry = path.join(projectRoot, "dist", "index.js");
|
|
147
142
|
const env = { ...process.env, MCP_TRANSPORT: transport2 };
|
|
148
143
|
if (!existsSync(distEntry)) {
|
|
149
|
-
|
|
144
|
+
logInfo("dist/index.js not found. Building project before start...");
|
|
150
145
|
const buildResult = spawnSync(pm, ["run", "build"], {
|
|
151
146
|
cwd: projectRoot,
|
|
152
147
|
stdio: "inherit",
|
|
@@ -156,7 +151,7 @@ function runServer(pm, transport2) {
|
|
|
156
151
|
throw new Error(`${pm} run build exited with code ${buildResult.status}`);
|
|
157
152
|
}
|
|
158
153
|
}
|
|
159
|
-
|
|
154
|
+
logInfo(`Starting ${transport2} transport via ${pm} run start...`);
|
|
160
155
|
const child = spawnSync(pm, ["run", "start"], {
|
|
161
156
|
cwd: projectRoot,
|
|
162
157
|
stdio: "inherit",
|
package/dist/cli/up.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/up.ts"],"sourcesContent":["import { spawnSync } from 'node:child_process';\nimport { copyFileSync, existsSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst dirname = path.dirname(fileURLToPath(import.meta.url));\nconst projectRoot = path.resolve(dirname, '../..');\n\nconst
|
|
1
|
+
{"version":3,"sources":["../../src/cli/up.ts"],"sourcesContent":["import { spawnSync } from 'node:child_process';\nimport { copyFileSync, existsSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst dirname = path.dirname(fileURLToPath(import.meta.url));\nconst projectRoot = path.resolve(dirname, '../..');\n\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nif (!command || command === '--help' || command === '-h') {\n printHelp();\n process.exit(0);\n}\n\nif (command !== 'up') {\n console.error(`Unknown command: ${command}`);\n printHelp();\n process.exit(1);\n}\n\nconst flags = parseFlags(args.slice(1));\nconst transport = (flags.transport ?? 'stdio').toLowerCase();\nconst installOnly = Boolean(flags['install-only']);\nconst preferStderr = transport === 'stdio';\nconst logInfo = (...messages: any[]) => (preferStderr ? console.error(...messages) : console.log(...messages));\nconst logWarn = (...messages: any[]) => (preferStderr ? console.error(...messages) : console.warn(...messages));\n\ntry {\n ensureNodeVersion();\n const packageManager = detectPackageManager();\n ensurePnpmConfig();\n installDependencies(packageManager);\n ensureEnvFile();\n\n if (installOnly) {\n logInfo('Dependencies installed. Skipping server launch (--install-only set).');\n process.exit(0);\n }\n\n runServer(packageManager, transport);\n} catch (error) {\n console.error(error instanceof Error ? error.message : error);\n process.exit(1);\n}\n\nfunction printHelp() {\n console.log(`Usage: npx @hol-org/hashnet-mcp up [options]\\n\\nOptions:\\n --transport <stdio|sse> Choose the transport to start (default: stdio)\\n --install-only Install deps and sync .env, then exit\\n -h, --help Show this help message`);\n}\n\nfunction parseFlags(values: string[]) {\n const cloned = [...values];\n return cloned.reduce<Record<string, any>>((acc, entry, index) => {\n if (entry.startsWith('--')) {\n const [key, inlineValue] = entry.split('=');\n const normalized = key.replace(/^--/, '');\n if (inlineValue !== undefined) {\n acc[normalized] = inlineValue;\n } else {\n const next = cloned[index + 1];\n if (next && !next.startsWith('--')) {\n acc[normalized] = next;\n cloned.splice(index + 1, 1);\n } else {\n acc[normalized] = true;\n }\n }\n }\n return acc;\n }, {});\n}\n\nfunction ensureNodeVersion() {\n const major = Number(process.versions.node.split('.')[0]);\n if (Number.isNaN(major) || major < 18) {\n throw new Error(`Node.js 18+ is required (detected ${process.versions.node}).`);\n }\n}\n\nfunction detectPackageManager(): 'pnpm' | 'npm' {\n if (commandExists('pnpm')) {\n return 'pnpm';\n }\n\n logWarn('pnpm not detected. Attempting to enable via corepack...');\n const enabled = spawnSync('corepack', ['enable', 'pnpm'], { stdio: 'inherit' });\n if (enabled.status === 0 && commandExists('pnpm')) {\n return 'pnpm';\n }\n\n logWarn('Falling back to npm. Install pnpm globally for faster installs.');\n return 'npm';\n}\n\nfunction commandExists(bin: string) {\n try {\n const result = spawnSync(bin, ['--version'], { stdio: 'ignore' });\n return result.status === 0;\n } catch {\n return false;\n }\n}\n\nfunction installDependencies(pm: 'pnpm' | 'npm') {\n logInfo(`Installing dependencies with ${pm}...`);\n const baseEnv = {\n ...process.env,\n NODE_OPTIONS: process.env.NODE_OPTIONS ?? '--max-old-space-size=8192',\n };\n\n const npmArgs = ['install', '--legacy-peer-deps'];\n\n const installResult = spawnSync(pm, pm === 'pnpm' ? ['install'] : npmArgs, {\n cwd: projectRoot,\n stdio: 'inherit',\n env: baseEnv,\n });\n if (installResult.status !== 0) {\n throw new Error(`${pm} install failed.`);\n }\n}\n\nfunction ensurePnpmConfig() {\n const npmrcPath = path.join(projectRoot, '.npmrc');\n if (existsSync(npmrcPath)) {\n return;\n }\n\n const content = [\n 'node-linker=isolated',\n 'shamefully-hoist=false',\n 'strict-peer-dependencies=false',\n 'auto-install-peers=false',\n 'resolution-mode=lowest-direct',\n 'node-options=--max-old-space-size=8192',\n 'child-concurrency=4',\n ].join('\\n');\n\n writeFileSync(npmrcPath, content);\n}\n\nfunction ensureEnvFile() {\n const envPath = path.join(projectRoot, '.env');\n const examplePath = path.join(projectRoot, '.env.example');\n if (!existsSync(envPath) && existsSync(examplePath)) {\n copyFileSync(examplePath, envPath);\n logInfo('Created .env from .env.example. Remember to fill in your credentials.');\n }\n}\n\nfunction runServer(pm: 'pnpm' | 'npm', transport: string) {\n if (!['stdio', 'sse'].includes(transport)) {\n throw new Error(`Unsupported transport \"${transport}\". Use stdio or sse.`);\n }\n const distEntry = path.join(projectRoot, 'dist', 'index.js');\n const env = { ...process.env, MCP_TRANSPORT: transport };\n\n if (!existsSync(distEntry)) {\n logInfo('dist/index.js not found. Building project before start...');\n const buildResult = spawnSync(pm, ['run', 'build'], {\n cwd: projectRoot,\n stdio: 'inherit',\n env,\n });\n if (buildResult.status !== 0) {\n throw new Error(`${pm} run build exited with code ${buildResult.status}`);\n }\n }\n\n logInfo(`Starting ${transport} transport via ${pm} run start...`);\n const child = spawnSync(pm, ['run', 'start'], {\n cwd: projectRoot,\n stdio: 'inherit',\n env,\n });\n if (child.status !== 0) {\n throw new Error(`${pm} run start exited with code ${child.status}`);\n }\n}\n"],"mappings":";;;AAAA,SAAS,iBAAiB;AAC1B,SAAS,cAAc,YAAY,qBAAqB;AACxD,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAE9B,IAAM,UAAU,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAC3D,IAAM,cAAc,KAAK,QAAQ,SAAS,OAAO;AAEjD,IAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,IAAM,UAAU,KAAK,CAAC;AAEtB,IAAI,CAAC,WAAW,YAAY,YAAY,YAAY,MAAM;AACxD,YAAU;AACV,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAI,YAAY,MAAM;AACpB,UAAQ,MAAM,oBAAoB,OAAO,EAAE;AAC3C,YAAU;AACV,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAM,QAAQ,WAAW,KAAK,MAAM,CAAC,CAAC;AACtC,IAAM,aAAa,MAAM,aAAa,SAAS,YAAY;AAC3D,IAAM,cAAc,QAAQ,MAAM,cAAc,CAAC;AACjD,IAAM,eAAe,cAAc;AACnC,IAAM,UAAU,IAAI,aAAqB,eAAe,QAAQ,MAAM,GAAG,QAAQ,IAAI,QAAQ,IAAI,GAAG,QAAQ;AAC5G,IAAM,UAAU,IAAI,aAAqB,eAAe,QAAQ,MAAM,GAAG,QAAQ,IAAI,QAAQ,KAAK,GAAG,QAAQ;AAE7G,IAAI;AACF,oBAAkB;AAClB,QAAM,iBAAiB,qBAAqB;AAC5C,mBAAiB;AACjB,sBAAoB,cAAc;AAClC,gBAAc;AAEd,MAAI,aAAa;AACf,YAAQ,sEAAsE;AAC9E,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,YAAU,gBAAgB,SAAS;AACrC,SAAS,OAAO;AACd,UAAQ,MAAM,iBAAiB,QAAQ,MAAM,UAAU,KAAK;AAC5D,UAAQ,KAAK,CAAC;AAChB;AAEA,SAAS,YAAY;AACnB,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,iDAAwP;AACtQ;AAEA,SAAS,WAAW,QAAkB;AACpC,QAAM,SAAS,CAAC,GAAG,MAAM;AACzB,SAAO,OAAO,OAA4B,CAAC,KAAK,OAAO,UAAU;AAC/D,QAAI,MAAM,WAAW,IAAI,GAAG;AAC1B,YAAM,CAAC,KAAK,WAAW,IAAI,MAAM,MAAM,GAAG;AAC1C,YAAM,aAAa,IAAI,QAAQ,OAAO,EAAE;AACxC,UAAI,gBAAgB,QAAW;AAC7B,YAAI,UAAU,IAAI;AAAA,MACpB,OAAO;AACL,cAAM,OAAO,OAAO,QAAQ,CAAC;AAC7B,YAAI,QAAQ,CAAC,KAAK,WAAW,IAAI,GAAG;AAClC,cAAI,UAAU,IAAI;AAClB,iBAAO,OAAO,QAAQ,GAAG,CAAC;AAAA,QAC5B,OAAO;AACL,cAAI,UAAU,IAAI;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;AAEA,SAAS,oBAAoB;AAC3B,QAAM,QAAQ,OAAO,QAAQ,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC;AACxD,MAAI,OAAO,MAAM,KAAK,KAAK,QAAQ,IAAI;AACrC,UAAM,IAAI,MAAM,qCAAqC,QAAQ,SAAS,IAAI,IAAI;AAAA,EAChF;AACF;AAEA,SAAS,uBAAuC;AAC9C,MAAI,cAAc,MAAM,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,UAAQ,yDAAyD;AACjE,QAAM,UAAU,UAAU,YAAY,CAAC,UAAU,MAAM,GAAG,EAAE,OAAO,UAAU,CAAC;AAC9E,MAAI,QAAQ,WAAW,KAAK,cAAc,MAAM,GAAG;AACjD,WAAO;AAAA,EACT;AAEA,UAAQ,iEAAiE;AACzE,SAAO;AACT;AAEA,SAAS,cAAc,KAAa;AAClC,MAAI;AACF,UAAM,SAAS,UAAU,KAAK,CAAC,WAAW,GAAG,EAAE,OAAO,SAAS,CAAC;AAChE,WAAO,OAAO,WAAW;AAAA,EAC3B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,oBAAoB,IAAoB;AAC/C,UAAQ,gCAAgC,EAAE,KAAK;AAC/C,QAAM,UAAU;AAAA,IACd,GAAG,QAAQ;AAAA,IACX,cAAc,QAAQ,IAAI,gBAAgB;AAAA,EAC5C;AAEA,QAAM,UAAU,CAAC,WAAW,oBAAoB;AAEhD,QAAM,gBAAgB,UAAU,IAAI,OAAO,SAAS,CAAC,SAAS,IAAI,SAAS;AAAA,IACzE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,EACP,CAAC;AACD,MAAI,cAAc,WAAW,GAAG;AAC9B,UAAM,IAAI,MAAM,GAAG,EAAE,kBAAkB;AAAA,EACzC;AACF;AAEA,SAAS,mBAAmB;AAC1B,QAAM,YAAY,KAAK,KAAK,aAAa,QAAQ;AACjD,MAAI,WAAW,SAAS,GAAG;AACzB;AAAA,EACF;AAEA,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,gBAAc,WAAW,OAAO;AAClC;AAEA,SAAS,gBAAgB;AACvB,QAAM,UAAU,KAAK,KAAK,aAAa,MAAM;AAC7C,QAAM,cAAc,KAAK,KAAK,aAAa,cAAc;AACzD,MAAI,CAAC,WAAW,OAAO,KAAK,WAAW,WAAW,GAAG;AACnD,iBAAa,aAAa,OAAO;AACjC,YAAQ,uEAAuE;AAAA,EACjF;AACF;AAEA,SAAS,UAAU,IAAoBA,YAAmB;AACxD,MAAI,CAAC,CAAC,SAAS,KAAK,EAAE,SAASA,UAAS,GAAG;AACzC,UAAM,IAAI,MAAM,0BAA0BA,UAAS,sBAAsB;AAAA,EAC3E;AACA,QAAM,YAAY,KAAK,KAAK,aAAa,QAAQ,UAAU;AAC3D,QAAM,MAAM,EAAE,GAAG,QAAQ,KAAK,eAAeA,WAAU;AAEvD,MAAI,CAAC,WAAW,SAAS,GAAG;AAC1B,YAAQ,2DAA2D;AACnE,UAAM,cAAc,UAAU,IAAI,CAAC,OAAO,OAAO,GAAG;AAAA,MAClD,KAAK;AAAA,MACL,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AACD,QAAI,YAAY,WAAW,GAAG;AAC5B,YAAM,IAAI,MAAM,GAAG,EAAE,+BAA+B,YAAY,MAAM,EAAE;AAAA,IAC1E;AAAA,EACF;AAEA,UAAQ,YAAYA,UAAS,kBAAkB,EAAE,eAAe;AAChE,QAAM,QAAQ,UAAU,IAAI,CAAC,OAAO,OAAO,GAAG;AAAA,IAC5C,KAAK;AAAA,IACL,OAAO;AAAA,IACP;AAAA,EACF,CAAC;AACD,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,IAAI,MAAM,GAAG,EAAE,+BAA+B,MAAM,MAAM,EAAE;AAAA,EACpE;AACF;","names":["transport"]}
|
package/dist/index.js
CHANGED
|
@@ -21,7 +21,7 @@ import { fetch as undiciFetch } from "undici";
|
|
|
21
21
|
import { config as loadEnv } from "dotenv";
|
|
22
22
|
import { z } from "zod";
|
|
23
23
|
if (process.env.NODE_ENV !== "test") {
|
|
24
|
-
loadEnv();
|
|
24
|
+
loadEnv({ quiet: true });
|
|
25
25
|
}
|
|
26
26
|
var LOG_LEVELS = ["fatal", "error", "warn", "info", "debug", "trace"];
|
|
27
27
|
var envSchema = z.object({
|
|
@@ -38,7 +38,8 @@ var envSchema = z.object({
|
|
|
38
38
|
BROKER_RATE_LIMIT_REDIS_URL: z.string().url().optional(),
|
|
39
39
|
LOG_LEVEL: z.enum(LOG_LEVELS).default("info"),
|
|
40
40
|
WORKFLOW_DRY_RUN: z.enum(["0", "1"]).optional().transform((value) => value === "1"),
|
|
41
|
-
BROKER_AUTO_TOP_UP: z.enum(["0", "1"]).optional().transform((value) => value === "1")
|
|
41
|
+
BROKER_AUTO_TOP_UP: z.enum(["0", "1"]).optional().transform((value) => value === "1"),
|
|
42
|
+
HTTP_STREAM_PORT: z.coerce.number().int().positive().optional()
|
|
42
43
|
}).superRefine((val, ctx) => {
|
|
43
44
|
const hasAccount = Boolean(val.HEDERA_ACCOUNT_ID);
|
|
44
45
|
const hasKey = Boolean(val.HEDERA_PRIVATE_KEY);
|
|
@@ -68,7 +69,8 @@ var parsed = envSchema.safeParse({
|
|
|
68
69
|
BROKER_RATE_LIMIT_REDIS_URL: normalized(process.env.BROKER_RATE_LIMIT_REDIS_URL),
|
|
69
70
|
LOG_LEVEL: normalized(process.env.LOG_LEVEL),
|
|
70
71
|
WORKFLOW_DRY_RUN: normalized(process.env.WORKFLOW_DRY_RUN),
|
|
71
|
-
BROKER_AUTO_TOP_UP: normalized(process.env.BROKER_AUTO_TOP_UP)
|
|
72
|
+
BROKER_AUTO_TOP_UP: normalized(process.env.BROKER_AUTO_TOP_UP),
|
|
73
|
+
HTTP_STREAM_PORT: normalized(process.env.HTTP_STREAM_PORT)
|
|
72
74
|
});
|
|
73
75
|
if (!parsed.success) {
|
|
74
76
|
throw new Error(`Invalid environment configuration:
|
|
@@ -189,10 +191,13 @@ async function safeReadBody(response) {
|
|
|
189
191
|
|
|
190
192
|
// src/logger.ts
|
|
191
193
|
import pino from "pino";
|
|
192
|
-
var logger = pino(
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
194
|
+
var logger = pino(
|
|
195
|
+
{
|
|
196
|
+
level: config.logLevel,
|
|
197
|
+
base: void 0
|
|
198
|
+
},
|
|
199
|
+
pino.destination(2)
|
|
200
|
+
);
|
|
196
201
|
|
|
197
202
|
// src/schemas/agent.ts
|
|
198
203
|
import { z as z2 } from "zod";
|
|
@@ -1834,10 +1839,8 @@ mcp.addResource({
|
|
|
1834
1839
|
var LOOPBACK = "127.0.0.1";
|
|
1835
1840
|
async function runStdio() {
|
|
1836
1841
|
logger.info("Starting stdio transport");
|
|
1837
|
-
await mcp.start({
|
|
1838
|
-
|
|
1839
|
-
});
|
|
1840
|
-
logger.info("Stdio transport exited");
|
|
1842
|
+
await mcp.start({ transportType: "stdio" });
|
|
1843
|
+
logger.info("Stdio transport started");
|
|
1841
1844
|
}
|
|
1842
1845
|
async function runSSE() {
|
|
1843
1846
|
const upstreamPort = config.httpStreamPort ?? config.port + 1;
|
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({\n transportType: 'stdio',\n });\n logger.info('Stdio transport exited');\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 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});\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 structuredContent: result,\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 structuredContent: isPlainObject(record.structuredContent) ? (record.structuredContent as Record<string, unknown>) : undefined,\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 structuredContent: 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","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();\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 })\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});\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\nexport const logger = pino({\n level: config.logLevel,\n base: undefined,\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 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});\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 structuredContent: result,\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 structuredContent: isPlainObject(record.structuredContent) ? (record.structuredContent as Record<string, unknown>) : undefined,\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 structuredContent: 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","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":";AAAA,OAAO,UAA+C;AACtD,SAAS,cAAAA,mBAAkB;AAC3B,SAAS,mBAAmB;;;ACF5B,SAAS,kBAAkB;AAC3B;AAAA,EAME,uBAAAC;AAAA,OACK;AACP,SAAS,eAAe;AAExB,SAAS,KAAAC,UAAS;;;ACXlB,SAAS,4BAA4B;AACrC,OAAO,gBAAgB;AACvB,OAAO,aAAa;AACpB,SAAS,SAAS,mBAAmB;;;ACHrC,SAAS,UAAU,eAAe;AAClC,SAAS,SAAS;AAElB,IAAI,QAAQ,IAAI,aAAa,QAAQ;AACnC,UAAQ,EAAE,OAAO,KAAK,CAAC;AACzB;AAEA,IAAM,aAAa,CAAC,SAAS,SAAS,QAAQ,QAAQ,SAAS,OAAO;AAEtE,IAAM,YAAY,EACf,OAAO;AAAA,EACN,yBAAyB,EACtB,OAAO,EACP,IAAI,EACJ,QAAQ,6CAA6C;AAAA,EACxD,yBAAyB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACpD,mBAAmB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC9C,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC/C,MAAM,EAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACrD,uBAAuB,EAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACnE,oBAAoB,EAAE,OAAO,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EACnE,kBAAkB,EAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9D,sCAAsC,EAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAClF,iCAAiC,EAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7E,6BAA6B,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACvD,WAAW,EAAE,KAAK,UAAU,EAAE,QAAQ,MAAM;AAAA,EAC5C,kBAAkB,EACf,KAAK,CAAC,KAAK,GAAG,CAAC,EACf,SAAS,EACT,UAAU,CAAC,UAAU,UAAU,GAAG;AAAA,EACrC,oBAAoB,EACjB,KAAK,CAAC,KAAK,GAAG,CAAC,EACf,SAAS,EACT,UAAU,CAAC,UAAU,UAAU,GAAG;AAAA,EACrC,kBAAkB,EAAE,OAAO,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAChE,CAAC,EACA,YAAY,CAAC,KAAK,QAAQ;AACzB,QAAM,aAAa,QAAQ,IAAI,iBAAiB;AAChD,QAAM,SAAS,QAAQ,IAAI,kBAAkB;AAC7C,MAAI,eAAe,QAAQ;AACzB,QAAI,SAAS;AAAA,MACX,MAAM,EAAE,aAAa;AAAA,MACrB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF,CAAC;AAEH,IAAM,aAAa,CAAC,UAAmB;AACrC,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,UAAU,MAAM,KAAK;AAC3B,SAAO,QAAQ,WAAW,IAAI,SAAY;AAC5C;AAEA,IAAM,SAAS,UAAU,UAAU;AAAA,EACjC,yBAAyB,WAAW,QAAQ,IAAI,uBAAuB;AAAA,EACvE,yBAAyB,WAAW,QAAQ,IAAI,uBAAuB;AAAA,EACvE,mBAAmB,WAAW,QAAQ,IAAI,iBAAiB;AAAA,EAC3D,oBAAoB,WAAW,QAAQ,IAAI,kBAAkB;AAAA,EAC7D,MAAM,WAAW,QAAQ,IAAI,IAAI;AAAA,EACjC,uBAAuB,WAAW,QAAQ,IAAI,qBAAqB;AAAA,EACnE,oBAAoB,WAAW,QAAQ,IAAI,kBAAkB;AAAA,EAC7D,kBAAkB,WAAW,QAAQ,IAAI,gBAAgB;AAAA,EACzD,sCAAsC,WAAW,QAAQ,IAAI,oCAAoC;AAAA,EACjG,iCAAiC,WAAW,QAAQ,IAAI,+BAA+B;AAAA,EACvF,6BAA6B,WAAW,QAAQ,IAAI,2BAA2B;AAAA,EAC/E,WAAW,WAAW,QAAQ,IAAI,SAAS;AAAA,EAC3C,kBAAkB,WAAW,QAAQ,IAAI,gBAAgB;AAAA,EACzD,oBAAoB,WAAW,QAAQ,IAAI,kBAAkB;AAAA,EAC7D,kBAAkB,WAAW,QAAQ,IAAI,gBAAgB;AAC3D,CAAC;AAED,IAAI,CAAC,OAAO,SAAS;AACnB,QAAM,IAAI,MAAM;AAAA,EAAuC,OAAO,MAAM,SAAS,CAAC,EAAE;AAClF;AAEO,IAAM,SAAS;AAAA,EACpB,mBAAmB,OAAO,KAAK;AAAA,EAC/B,sBAAsB,OAAO,KAAK;AAAA,EAClC,iBAAiB,OAAO,KAAK;AAAA,EAC7B,kBAAkB,OAAO,KAAK;AAAA,EAC9B,MAAM,OAAO,KAAK;AAAA,EAClB,kBACE,QAAQ,OAAO,KAAK,kBAAkB,KAAK,QAAQ,OAAO,KAAK,qBAAqB,OAAO,KAAK,kBAAkB;AAAA,EACpH,YAAY,MAAM;AAChB,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,OAAO;AACX,UAAM,aACJ,yBACA,sBACA,oBACA;AACF,QAAI,CAAC,WAAY,QAAO;AACxB,WAAO;AAAA,MACL,eAAe;AAAA,MACf,WAAW;AAAA,MACX,WAAW;AAAA,MACX,wBAAwB;AAAA,MACxB,4BAA4B;AAAA,MAC5B,OAAO,8BACH;AAAA,QACE,KAAK;AAAA,MACP,IACA;AAAA,IACN;AAAA,EACF,GAAG;AAAA,EACH,gBAAgB,OAAO,KAAK,oBAAoB;AAAA,EAChD,gBAAgB,OAAO,KAAK;AAAA,EAC5B,UAAU,OAAO,KAAK;AACxB;;;AD5GA,IAAM,SAAS,IAAI,qBAAqB;AAAA,EACtC,SAAS,OAAO;AAAA,EAChB,QAAQ,OAAO;AAAA,EACf,uBAAuB,OAAO,mBAC1B;AAAA,IACE,WAAW,OAAO;AAAA,IAClB,YAAY,OAAO;AAAA,IACnB,MAAM;AAAA,EACR,IACA;AACN,CAAC;AAED,IAAM,gBAAgB,cAAc;AAEpC,SAAS,gBAAgB;AACvB,MAAI,CAAC,OAAO,UAAW,QAAO;AAE9B,QAAM,iBAAgD,CAAC;AAEvD,MAAI,OAAO,UAAU,kBAAkB,QAAW;AAChD,mBAAe,gBAAgB,OAAO,UAAU;AAAA,EAClD;AACA,MAAI,OAAO,UAAU,cAAc,QAAW;AAC5C,mBAAe,UAAU,OAAO,UAAU;AAAA,EAC5C;AACA,MAAI,OAAO,UAAU,cAAc,QAAW;AAC5C,mBAAe,YAAY,OAAO,UAAU;AAAA,EAC9C;AACA,MAAI,OAAO,UAAU,2BAA2B,QAAW;AACzD,mBAAe,yBAAyB,OAAO,UAAU;AAAA,EAC3D;AACA,MAAI,OAAO,UAAU,+BAA+B,QAAW;AAC7D,mBAAe,2BAA2B,OAAO,UAAU;AAAA,EAC7D;AAEA,MAAI,OAAO,UAAU,OAAO,KAAK;AAC/B,mBAAe,YAAY;AAC3B,mBAAe,aAAa,IAAI,QAAQ,OAAO,UAAU,MAAM,GAAG;AAAA,EACpE;AAEA,MACE,CAAC,eAAe,iBAChB,CAAC,eAAe,WAChB,CAAC,eAAe,aAChB,CAAC,eAAe,WAChB;AACA,WAAO;AAAA,EACT;AAEA,SAAO,IAAI,WAAW,cAAc;AACtC;AAIA,eAAsB,WAAc,MAAiC;AACnE,MAAI,eAAe;AACjB,WAAO,cAAc,SAAS,MAAM,KAAK,MAAM,CAAC;AAAA,EAClD;AACA,SAAO,KAAK,MAAM;AACpB;AAUA,eAAsB,iBAAiB,WAAoD;AACzF,MAAI,CAAC,OAAO,sBAAsB;AAChC,UAAM,IAAI,MAAM,+DAA+D;AAAA,EACjF;AACA,QAAM,OAAO,OAAO,kBAAkB,SAAS,GAAG,IAAI,OAAO,oBAAoB,GAAG,OAAO,iBAAiB;AAC5G,QAAM,MAAM,IAAI,IAAI,mBAAmB,IAAI;AAC3C,MAAI,WAAW;AACb,QAAI,aAAa,IAAI,aAAa,SAAS;AAAA,EAC7C;AACA,QAAM,UAAkC;AAAA,IACtC,QAAQ;AAAA,IACR,aAAa,OAAO;AAAA,EACtB;AACA,QAAM,UAAU,YAAY;AAC1B,UAAM,WAAW,MAAM,YAAY,KAAK,EAAE,QAAQ,OAAO,QAAQ,CAAC;AAClE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,OAAO,MAAM,aAAa,QAAQ;AACxC,YAAM,IAAI,MAAM,mCAAmC,SAAS,MAAM,MAAM,QAAQ,SAAS,UAAU,EAAE;AAAA,IACvG;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AACA,MAAI,eAAe;AACjB,WAAO,cAAc,SAAS,OAAO;AAAA,EACvC;AACA,SAAO,QAAQ;AACjB;AAEA,eAAe,aAAa,UAAoB;AAC9C,MAAI;AACF,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,QAAQ;AAAA,EACjB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;AE7GA,OAAO,UAAU;AAIV,IAAM,SAAS;AAAA,EACpB;AAAA,IACE,OAAO,OAAO;AAAA,IACd,MAAM;AAAA,EACR;AAAA,EACA,KAAK,YAAY,CAAC;AACpB;;;ACVA,SAAS,KAAAC,UAAS;AAGlB,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EAChC,UAAUA,GAAE,OAAO;AAAA,EACnB,QAAQA,GAAE,OAAO;AACnB,CAAC;AAED,IAAM,gBAAgBA,GAAE,OAAO;AAAA,EAC7B,MAAMA,GAAE,MAAM,CAACA,GAAE,QAAQ,CAAC,GAAGA,GAAE,QAAQ,CAAC,CAAC,CAAC;AAAA,EAC1C,cAAcA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC;AAAA,EACpD,OAAOA,GAAE,OAAO;AAAA,EAChB,SAASA,GAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAED,IAAM,kBAAkBA,GAAE,OAAO;AAAA,EAC/B,SAASA,GAAE,OAAO;AAAA,EAClB,gBAAgBA,GAAE,OAAO;AAAA,IACvB,KAAKA,GAAE,OAAO,EAAE,IAAI;AAAA,IACpB,WAAWA,GAAE,KAAK,CAAC,SAAS,KAAK,CAAC;AAAA,EACpC,CAAC;AAAA,EACD,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC;AAAA,EAChD,aAAaA,GAAE,OAAO;AAAA,EACtB,cAAcA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC3C,WAAWA,GACR;AAAA,IACCA,GAAE,OAAO;AAAA,MACP,MAAMA,GAAE,OAAO;AAAA,MACf,aAAaA,GAAE,OAAO;AAAA,IACxB,CAAC;AAAA,EACH,EACC,SAAS;AAAA,EACZ,OAAOA,GACJ;AAAA,IACCA,GAAE,OAAO;AAAA,MACP,MAAMA,GAAE,OAAO;AAAA,MACf,aAAaA,GAAE,OAAO;AAAA,IACxB,CAAC;AAAA,EACH,EACC,SAAS;AAAA,EACZ,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,MAAMA,GAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAED,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACjC,SAASA,GAAE,OAAO;AAAA,EAClB,MAAMA,GAAE,OAAO,EAAE,IAAI;AAAA,EACrB,cAAcA,GAAE,OAAO;AAAA,EACvB,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,KAAKA,GAAE,OAAO,EAAE,SAAS;AAAA,EACzB,SAASA,GAAE,MAAM,gBAAgB,EAAE,SAAS;AAAA,EAC5C,cAAcA,GAAE,OAAO,EAAE,SAAS;AAAA,EAClC,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,YAAYA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACnD,gBAAgBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACpC,iBAAiBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,cAAcA,GAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAEM,IAAM,qBAAqB,kBAAkB,OAAO;AAAA,EACzD,SAAS,cAAc,SAAS;AAAA,EAChC,WAAW,gBAAgB,SAAS;AACtC,CAAC;AAED,IAAM,iBAAiBA,GAAE,OAAO;AAAA,EAC9B,YAAYA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAChD,UAAUA,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,YAAYA,GAAE,OAAO,EAAE,YAAY,EAAE,SAAS;AAAA,EAC9C,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC5C,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,sBAAsBA,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC3C,cAAcA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS;AAC9F,CAAC;AAEM,IAAM,0BAA+DA,GAAE,OAAO;AAAA,EACnF,SAAS;AAAA,EACT,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACpC,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,uBAAuBA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,sBAAsBA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACnD,UAAU,eAAe,SAAS;AACpC,CAAC;;;AC9EM,SAAS,kBAAkB,aAAmC,SAA4B;AAC/F,MAAI,CAAC,aAAa,OAAQ;AAE1B,QAAM,UAAU,kBAAkB,WAAW;AAC7C,MAAI,QAAQ,SAAS,GAAG;AACtB,aAAS,QAAQ,QAAQ,EAAE,YAAY,QAAQ,GAAG,sBAAsB;AACxE,UAAM,QAAQ,SAAS,WAAW;AAClC,UAAM,IAAI,MAAM,8CAA8C,KAAK,KAAK,QAAQ,KAAK,IAAI,CAAC,EAAE;AAAA,EAC9F;AACF;AAEO,SAAS,kBAAkB,aAAiC;AACjE,SAAO,YAAY,OAAO,CAAC,aAAa;AACtC,UAAM,QAAQ,QAAQ,IAAI,QAAQ;AAClC,WAAO,UAAU,UAAa,MAAM,WAAW;AAAA,EACjD,CAAC;AACH;;;ACXO,SAAS,eAAiC,YAAkD;AACjG,iBAAe,IAAI,OAAe,SAAoF;AACpH,UAAM,iBAAiB,OAAW,MAAM,EAAE,UAAU,WAAW,KAAK,CAAC;AACrE,UAAM,SAAS,SAAS,UAAU,OAAO;AACzC,sBAAkB,WAAW,aAAa,EAAE,QAAQ,gBAAgB,SAAS,WAAW,KAAK,CAAC;AAC9F,UAAM,UAAU,MAAM,WAAW,cAAc,KAAK;AACpD,UAAM,eAA8C,CAAC;AAErD,aAAS,QAAQ,GAAG,QAAQ,WAAW,MAAM,QAAQ,SAAS,GAAG;AAC/D,YAAM,OAAO,WAAW,MAAM,KAAK;AACnC,YAAM,aAAa,eAAe,MAAM,EAAE,MAAM,KAAK,MAAM,MAAM,CAAC;AAClE,YAAM,WAAkD;AAAA,QACtD;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAEA,YAAM,aAAa,MAAM,eAAe,MAAM,UAAU,MAAM;AAC9D,YAAM,YAAY,KAAK,IAAI;AAE3B,UAAI,YAAY;AACd,mBAAW,KAAK,EAAE,OAAO,GAAG,uBAAuB;AACnD,qBAAa,KAAK,EAAE,MAAM,KAAK,MAAM,YAAY,GAAG,SAAS,KAAK,CAAC;AAEnE,cAAM,SAAS,OAAO,cAAc,EAAE,UAAU,WAAW,MAAM,MAAM,KAAK,MAAM,OAAO,QAAQ,CAAC;AAElG,cAAM,SAAS,OAAO,gBAAgB,EAAE,UAAU,WAAW,MAAM,MAAM,KAAK,MAAM,OAAO,SAAS,QAAQ,OAAU,CAAC;AACvH;AAAA,MACF;AAEA,qBAAe,KAAK,EAAE,MAAM,KAAK,KAAK,GAAG,qBAAqB;AAE9D,YAAM,SAAS,OAAO,cAAc,EAAE,UAAU,WAAW,MAAM,MAAM,KAAK,MAAM,OAAO,QAAQ,CAAC;AAElG,UAAI;AAEF,cAAM,SAAS,MAAM,KAAK,IAAI,QAAQ;AACtC,cAAM,aAAa,KAAK,IAAI,IAAI;AAChC,mBAAW,KAAK,EAAE,WAAW,GAAG,uBAAuB;AACvD,qBAAa,KAAK,EAAE,MAAM,KAAK,MAAM,YAAY,SAAS,OAAO,OAAO,CAAC;AAEzE,cAAM,SAAS,OAAO,gBAAgB,EAAE,UAAU,WAAW,MAAM,MAAM,KAAK,MAAM,OAAO,SAAS,OAAO,CAAC;AAAA,MAC9G,SAAS,OAAO;AACd,cAAM,aAAa,KAAK,IAAI,IAAI;AAChC,cAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,mBAAW,MAAM,EAAE,YAAY,OAAO,QAAQ,GAAG,qBAAqB;AACtE,qBAAa,KAAK,EAAE,MAAM,KAAK,MAAM,YAAY,SAAS,OAAO,OAAO,QAAQ,CAAC;AAEjF,cAAM,SAAS,OAAO,cAAc,EAAE,UAAU,WAAW,MAAM,MAAM,KAAK,MAAM,OAAO,SAAS,MAAM,CAAC;AACzG,cAAM;AAAA,MACR;AAAA,IACF;AAEA,WAAO;AAAA,MACL,UAAU,WAAW;AAAA,MACrB;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,IAAI;AAC3B;AAEA,eAAe,eACb,MACA,MACA,QACkB;AAClB,MAAI,UAAU,KAAK,sBAAsB,MAAM;AAC7C,WAAO;AAAA,EACT;AACA,MAAI,KAAK,MAAM;AACb,WAAO,QAAQ,MAAM,KAAK,KAAK,IAAI,CAAC;AAAA,EACtC;AACA,SAAO;AACT;;;ACtFA,IAAM,YAAY,oBAAI,IAAyD;AAExE,SAAS,iBAAmC,YAAkD;AACnG,QAAM,WAAW,eAAe,UAAU;AAC1C,YAAU,IAAI,WAAW,MAAM,QAAQ;AACvC,SAAO;AACT;;;ACOA,IAAM,sBAA4E;AAAA,EAChF,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,OAAO,EAAE,SAAS,CAAC,EAAE;AAAA,EACpC,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,cAAM,UAAU,EAAE,GAAG,MAAM,OAAO,OAAO,MAAM,SAAS,EAAE;AAC1D,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,OAAO,OAAO,CAAC;AACpE,gBAAQ,QAAQ,SAAS;AACzB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,YAAI,CAAC,MAAM,OAAO;AAChB,iBAAO;AAAA,QACT;AACA,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,aAAa,EAAE,OAAO,MAAM,OAAO,OAAO,MAAM,SAAS,EAAE,CAAC,CAAC;AAClH,gBAAQ,QAAQ,SAAS;AACzB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,oBAAoB,iBAAiB,mBAAmB;;;ACjDrE,SAAS,2BAA2B;;;ACY7B,IAAM,2BAAN,cAAuC,MAAM;AAAA,EACzC,OAAO;AAAA,EACP;AAAA,EAET,YAAY,OAAmC,MAAe;AAC5D,UAAM,YAAY,KAAK,IAAI,GAAG,MAAM,oBAAoB,CAAC;AACzD,UAAM,UAAU,QAAQ,6CAA6C,SAAS;AAC9E,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,UAAU;AAAA,MACb,iBAAiB,MAAM;AAAA,MACvB,kBAAkB,MAAM,oBAAoB;AAAA,MAC5C,kBAAkB;AAAA,MAClB,eAAe,MAAM;AAAA,MACrB,gBAAgB,MAAM;AAAA,MACtB,UAAU,MAAM;AAAA,MAChB,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,IACnB;AAAA,EACF;AACF;;;ADrBA,eAAsB,2BAA2B,EAAE,SAAS,YAAY,GAAmC;AACzG,SAAO,MAAM;AACX,QAAI;AACF,YAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,cAAc,OAAO,CAAC;AAC3E,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,YAAY,MAAM,qBAAqB,OAAO,OAAO;AAC3D,UAAI,WAAW;AACb,cAAM,SAAU,MAAM,cAAc,SAAS,KAAM;AACnD,YAAI,WAAW,SAAS;AACtB;AAAA,QACF;AACA,cAAM;AAAA,MACR;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,eAAe,qBAAqB,OAAgB,SAAmC;AACrF,MAAI,EAAE,iBAAiB,wBAAwB,MAAM,WAAW,KAAK;AACnE,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,MAAM,WAAW,CAAC,WAAW,OAAO,qBAAqB,OAAO,CAAC;AAC/E,SAAO,IAAI,yBAAyB,KAAK;AAC3C;AAEA,eAAsB,8BAA8B,WAAmB;AACrE,SAAO;AAAA,IAAW,CAAC,WACjB,OAAO,8BAA8B,WAAW;AAAA,MAC9C,YAAY;AAAA,MACZ,WAAW,IAAI;AAAA,IACjB,CAAC;AAAA,EACH;AACF;;;AE3BA,IAAM,yBAAqF;AAAA,EACzF,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,CAAC,EAAE,QAAQ,OAAO,EAAE,QAAQ;AAAA,EAC3C,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,QAAQ,MAAM,WAAW,CAAC,WAAW,OAAO,qBAAqB,QAAQ,OAAO,CAAC;AACvF,gBAAQ,QAAQ;AAChB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM,2BAA2B;AAAA,UAChD,SAAS,QAAQ;AAAA,UACjB,aAAa,OAAO,QAAQ;AAC1B,oBAAQ,QAAQ,IAAI;AACpB,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,eAAe,YAAY,OAAO,SAAS,cAAc,UAAU;AACrE,kBAAQ,YAAY,SAAS;AAAA,QAC/B;AACA,gBAAQ,SAAS;AACjB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,YAAI,CAAC,QAAQ,WAAW;AACtB,gBAAM,IAAI,MAAM,iCAAiC;AAAA,QACnD;AACA,cAAM,SAAS,MAAM;AAAA,UAAW,CAAC,WAC/B,OAAO,8BAA8B,QAAQ,WAAY;AAAA,YACvD,YAAY;AAAA,YACZ,WAAW,IAAI;AAAA,UACjB,CAAC;AAAA,QACH;AACA,YAAI,QAAQ,QAAQ,MAAM;AACxB,kBAAQ,OAAO,OAAO,OAAO;AAAA,QAC/B;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,uBAAuB,iBAAiB,sBAAsB;;;ACvD3E,IAAM,iBAA6D;AAAA,EACjE,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,CAAC,EAAE,MAAM,KAAK,OAAO,EAAE,MAAM,MAAM,YAAY,OAAU;AAAA,EACxE,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM;AAAA,UAAW,CAAC,WACjC,OAAO,KAAK,cAAc,EAAE,MAAM,QAAQ,MAAM,mBAAmB,IAAI,MAAM,QAAQ,KAAK,CAAC;AAAA,QAC7F;AACA,YAAI,UAAU,WAAW;AACvB,kBAAQ,YAAY,SAAS;AAAA,QAC/B;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,YAAI,CAAC,QAAQ,UAAW,OAAM,IAAI,MAAM,sBAAsB;AAC9D,eAAO;AAAA,UAAW,CAAC,WACjB,OAAO,KAAK,YAAY;AAAA,YACtB,WAAW,QAAQ;AAAA,YACnB,SAAS,MAAM,WAAW;AAAA,YAC1B,MAAM,MAAM,QAAQ,QAAQ;AAAA,UAC9B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,YAAI,CAAC,QAAQ,UAAW,OAAM,IAAI,MAAM,sBAAsB;AAC9D,cAAM,UAAU,MAAM,WAAW,CAAC,WAAW,OAAO,KAAK,WAAW,QAAQ,SAAU,CAAC;AACvF,gBAAQ,aAAa;AACrB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,YAAI,CAAC,QAAQ,UAAW,OAAM,IAAI,MAAM,sBAAsB;AAC9D,eAAO,WAAW,CAAC,WAAW,OAAO,KAAK,eAAe,EAAE,WAAW,QAAQ,WAAY,iBAAiB,EAAE,CAAC,CAAC;AAAA,MACjH;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,YAAI,CAAC,QAAQ,UAAW,OAAM,IAAI,MAAM,sBAAsB;AAC9D,eAAO,WAAW,CAAC,WAAW,OAAO,KAAK,WAAW,QAAQ,SAAU,CAAC;AAAA,MAC1E;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,eAAe,iBAAiB,cAAc;;;AChE3D,IAAM,gBAA0D;AAAA,EAC9D,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,OAAO,CAAC;AAAA,EACvB,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,MAAM,CAAC;AAC5D,gBAAQ,QAAQ;AAChB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,eAAe,CAAC;AACrE,gBAAQ,UAAU;AAClB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,eAAe,CAAC;AACrE,gBAAQ,YAAY;AACpB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,YAAY,WAAW,CAAC,WAAW,OAAO,cAAc,CAAC;AAAA,IAChE;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,YACH;AAAA,QAAW,CAAC,WACV,OAAO,eAAe;AAAA,UACpB,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,UAC9C,MAAM;AAAA,QACR,CAAQ;AAAA,MACV;AAAA,IACJ;AAAA,EACF;AACF;AAEO,IAAM,cAAc,iBAAiB,aAAa;;;AC9CzD,IAAM,iBAA6E;AAAA,EACjF,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,2BAA2B,qBAAqB,oBAAoB;AAAA,EAClF,eAAe,OAAO,CAAC;AAAA,EACvB,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,cAAM,SAAS,MAAM,kBAAkB,IAAI,EAAE,OAAO,MAAM,gBAAgB,OAAO,EAAE,CAAC;AACpF,gBAAQ,YAAY;AACpB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,SAAS,OAAO,MAAM;AACzC,cAAM,UAAU,EAAE,SAAS,MAAM,oBAAoB;AACrD,cAAM,SAAS,MAAM,qBAAqB,IAAI,SAAS,EAAE,OAAO,CAAC;AACjE,gBAAQ,eAAe;AACvB,gBAAQ,OAAO,OAAO,QAAQ;AAC9B,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,SAAS,OAAO,MAAM;AACzC,YAAI,CAAC,QAAQ,KAAM,OAAM,IAAI,MAAM,wCAAwC;AAC3E,cAAM,SAAS,MAAM,aAAa,IAAI,EAAE,MAAM,QAAQ,MAAM,SAAS,MAAM,YAAY,GAAG,EAAE,OAAO,CAAC;AACpG,gBAAQ,OAAO;AACf,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,SAAS,OAAO,MAAM;AAClC,cAAM,SAAS,MAAM,YAAY,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;AACnD,gBAAQ,MAAM;AACd,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,uBAAuB,iBAAiB,cAAc;;;AC1D5D,SAAS,iBAAmC,YAAkD;AACnG,MAAI,CAAC,WAAW,SAAS;AACvB,eAAW,UAAU;AAAA,EACvB;AACA,MAAI,CAAC,WAAW,aAAa;AAC3B,eAAW,cAAc,CAAC,yBAAyB;AAAA,EACrD;AACA,SAAO,iBAAiB,UAAU;AACpC;;;ACAA,IAAM,2BAA2F;AAAA,EAC/F,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,OAAO,CAAC;AAAA,EACvB,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,cAAM,SAAS,MAAM;AAAA,UAAW,CAAC,WAC/B,OAAO,OAAO,EAAE,GAAG,MAAM,SAAS,YAAY,MAAM,WAAW,CAAC,MAAM,QAAQ,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,CAAC;AAAA,QAC9G;AACA,YAAI,CAAC,OAAO,MAAM,QAAQ;AACxB,gBAAM,IAAI,MAAM,SAAS,MAAM,OAAO,0BAA0B,MAAM,YAAY,YAAY,EAAE;AAAA,QAClG;AACA,gBAAQ,OAAO,OAAO,KAAK,CAAC,EAAE;AAC9B,eAAO,OAAO,KAAK,CAAC;AAAA,MACtB;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,YAAI,CAAC,QAAQ,KAAM,OAAM,IAAI,MAAM,kCAAkC;AACrE,cAAM,OAAO,MAAM,YAAY,EAAE,MAAM,UAAmB,OAAO,MAAM,UAAU,IAAI;AACrF,cAAM,WAAW,MAAM;AAAA,UAAW,CAAC,WACjC,OAAO,KAAK,cAAc,EAAE,MAAM,QAAQ,MAAO,mBAAmB,MAAM,qBAAqB,KAAK,KAAK,CAAC;AAAA,QAC5G;AACA,gBAAQ,YAAY,SAAS;AAC7B,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,YAAI,CAAC,QAAQ,UAAW,OAAM,IAAI,MAAM,sBAAsB;AAC9D,cAAM,OAAO,MAAM,YAAY,EAAE,MAAM,UAAmB,OAAO,MAAM,UAAU,IAAI;AACrF,eAAO;AAAA,UAAW,CAAC,WACjB,OAAO,KAAK,YAAY,EAAE,WAAW,QAAQ,WAAY,MAAM,SAAS,MAAM,QAAQ,CAAC;AAAA,QACzF;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,YAAI,CAAC,QAAQ,UAAW,OAAM,IAAI,MAAM,sBAAsB;AAC9D,cAAM,UAAU,MAAM,WAAW,CAAC,WAAW,OAAO,KAAK,WAAW,QAAQ,SAAU,CAAC;AACvF,gBAAQ,aAAa;AACrB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,YAAI,CAAC,QAAQ,UAAW,OAAM,IAAI,MAAM,sBAAsB;AAC9D,eAAO,WAAW,CAAC,WAAW,OAAO,KAAK,WAAW,QAAQ,SAAU,CAAC;AAAA,MAC1E;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,yBAAyB,iBAAiB,wBAAwB;;;ACtD/E,IAAM,6BAAiG;AAAA,EACrG,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,OAAO,CAAC;AAAA,EACvB,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,OAAO,SAAS,OAAO,MAAM;AACzC,cAAM,SAAS,MAAM,kBAAkB,IAAI,EAAE,OAAO,MAAM,MAAM,GAAG,EAAE,OAAO,CAAC;AAC7E,gBAAQ,YAAY;AACpB,gBAAQ,OAAO,MAAM,QAAS,OAAO,MAAM,CAAC,GAAG,QAAgB,OAAO,CAAC,GAAG;AAC1E,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,cAAc,CAAC;AACpE,gBAAQ,gBAAgB;AACxB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,eAAe,EAAE,SAAS,EAAE,gBAAgB,mBAAmB,GAAG,MAAM,KAAK,CAAC,CAAC;AACpI,gBAAQ,iBAAiB;AACzB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,MAAM,CAAC;AAC5D,gBAAQ,QAAQ;AAChB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,eAAe,CAAC;AACrE,gBAAQ,UAAU;AAClB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,eAAe,CAAC;AACrE,gBAAQ,YAAY;AACpB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,eAAe,CAAC;AACrE,gBAAQ,YAAY;AACpB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC,EAAE,OAAO,QAAQ,MAAM,EAAE,MAAM,WAAW,QAAQ;AAAA,MACzD,KAAK,OAAO,EAAE,OAAO,SAAS,OAAO,MAAM;AACzC,YAAI,CAAC,QAAQ,KAAM,OAAM,IAAI,MAAM,6BAA6B;AAChE,cAAM,SAAS,MAAM,aAAa,IAAI,EAAE,MAAM,QAAQ,MAAM,SAAS,MAAM,QAAQ,GAAG,EAAE,OAAO,CAAC;AAChG,gBAAQ,OAAO;AACf,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM;AAAA,MAC5B,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,qBAAqB,QAAQ,WAAW,SAAS,uBAAuB,QAAQ,SAAS,CAAC;AAC/I,gBAAQ,cAAc;AACtB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,iCAAiC,iBAAiB,0BAA0B;;;ACnGzF,IAAM,6BAA6E;AAAA,EACjF,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,OAAO,EAAE,aAAa,CAAC,EAAE;AAAA,EACxC,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,cAAM,QAAQ,MAAM;AAAA,UAAW,CAAC,WAC9B,OAAO,KAAK,cAAc,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,WAAW,mBAAmB,IAAI,CAAC;AAAA,QAC/F;AACA,cAAM,aAAa,MAAM;AAAA,UAAW,CAAC,WACnC,OAAO,KAAK,cAAc,EAAE,MAAM,MAAM,gBAAgB,MAAM,MAAM,gBAAgB,mBAAmB,IAAI,CAAC;AAAA,QAC9G;AACA,gBAAQ,eAAe,MAAM;AAC7B,gBAAQ,oBAAoB,WAAW;AACvC,eAAO,EAAE,OAAO,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,YAAI,CAAC,QAAQ,gBAAgB,CAAC,QAAQ,mBAAmB;AACvD,gBAAM,IAAI,MAAM,kBAAkB;AAAA,QACpC;AACA,cAAM,aAAa,MAAM,cAAc;AACvC,iBAAS,IAAI,GAAG,IAAI,YAAY,KAAK,GAAG;AACtC,gBAAM,gBAAgB,MAAM;AAAA,YAAW,CAAC,WACtC,OAAO,KAAK,YAAY,EAAE,WAAW,QAAQ,cAAe,MAAM,MAAM,WAAW,SAAS,MAAM,aAAa,CAAC;AAAA,UAClH;AACA,kBAAQ,YAAY,KAAK,EAAE,QAAQ,SAAS,UAAU,cAAc,CAAC;AACrE,gBAAM,qBAAqB,MAAM;AAAA,YAAW,CAAC,WAC3C,OAAO,KAAK,YAAY,EAAE,WAAW,QAAQ,mBAAoB,MAAM,MAAM,gBAAgB,SAAS,MAAM,kBAAkB,CAAC;AAAA,UACjI;AACA,kBAAQ,YAAY,KAAK,EAAE,QAAQ,cAAc,UAAU,mBAAmB,CAAC;AAAA,QACjF;AACA,eAAO,QAAQ;AAAA,MACjB;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,eAAe,MAAM,WAAW,CAAC,WAAW,OAAO,KAAK,WAAW,QAAQ,YAAa,CAAC;AAC/F,cAAM,oBAAoB,MAAM,WAAW,CAAC,WAAW,OAAO,KAAK,WAAW,QAAQ,iBAAkB,CAAC;AACzG,eAAO,EAAE,cAAc,kBAAkB;AAAA,MAC3C;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,QAAQ,IAAI;AAAA,UAChB,WAAW,CAAC,WAAW,OAAO,KAAK,WAAW,QAAQ,YAAa,CAAC;AAAA,UACpE,WAAW,CAAC,WAAW,OAAO,KAAK,WAAW,QAAQ,iBAAkB,CAAC;AAAA,QAC3E,CAAC;AACD,eAAO,EAAE,OAAO,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,2BAA2B,iBAAiB,0BAA0B;;;ACxEnF,IAAM,6BAAiG;AAAA,EACrG,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,OAAO,CAAC;AAAA,EACvB,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,cAAM,WAAW,MAAM;AAAA,UAAW,CAAC,WACjC,OAAO,OAAO,EAAE,GAAG,MAAM,OAAO,YAAY,CAAC,UAAU,GAAG,OAAO,MAAM,SAAS,GAAG,CAAC;AAAA,QACtF;AACA,gBAAQ,OAAO,SAAS;AACxB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,MAAM,MAAM,WAAW,CAAC,WAAW,OAAO,0BAA0B,YAAY,MAAM,KAAK,CAAC;AAAA,IAC5G;AAAA,EACF;AACF;AAEO,IAAM,2BAA2B,iBAAiB,0BAA0B;;;ACJnF,IAAM,kCAAgH;AAAA,EACpH,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,CAAC,EAAE,QAAQ,OAAO,EAAE,SAAS,oBAAoB,CAAC,GAAG,mBAAmB,CAAC,EAAE;AAAA,EAC1F,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,8BAA8B,UAAU,CAAC,MAAM,4BAA4B;AAAA,MACvG,KAAK,YAAY,WAAW,CAAC,WAAW,OAAO,wBAAwB,CAAC;AAAA,IAC1E;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,OAAO,QAAQ,GAAG,sBAAsB;AACpD,YAAI,CAAC,kBAAmB,QAAO;AAC/B,cAAM,UAAU;AAChB,cAAM,aAAa,MAAM,gCAAgC,CAAC;AAC1D,cAAM,EAAE,UAAU,QAAQ,IAAI,4BAA4B,YAAY,OAAO;AAC7E,gBAAQ,qBAAqB;AAC7B,gBAAQ,oBAAoB;AAC5B,YAAI,SAAS,SAAS,GAAG;AACvB,kBAAQ,UAAU;AAAA,YAChB,GAAG,QAAQ;AAAA,YACX,sBAAsB;AAAA,UACxB;AAAA,QACF;AACA,eAAO,EAAE,UAAU,QAAQ;AAAA,MAC7B;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM,WAAW,CAAC,WAAW,OAAO,qBAAqB,QAAQ,OAAO,CAAC;AAAA,IACjG;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,cAAM,WAAW,MAAM,2BAA2B;AAAA,UAChD,SAAS,QAAQ;AAAA,UACjB,aAAa,OAAO,YAAY;AAC9B,oBAAQ,YAAY;AACpB,gBAAI,CAAC,MAAM,aAAa;AACtB,qBAAO;AAAA,YACT;AACA,kBAAM,wBAAwB,MAAM,aAAa,OAAO;AACxD,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,gBAAQ,qBAAqB;AAC7B,YAAI,eAAe,YAAY,OAAO,SAAS,cAAc,UAAU;AACrE,kBAAQ,YAAY,SAAS;AAAA,QAC/B;AACA,YAAI,UAAU,YAAY,OAAO,SAAS,SAAS,UAAU;AAC3D,kBAAQ,OAAO,SAAS;AAAA,QAC1B;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,YAAI,CAAC,QAAQ,UAAW,OAAM,IAAI,MAAM,iCAAiC;AACzE,cAAM,SAAS,MAAM,8BAA8B,QAAQ,SAAS;AACpE,gBAAQ,WAAW;AACnB,YAAI,QAAQ,QAAQ,MAAM;AACxB,kBAAQ,OAAO,OAAO,OAAO;AAAA,QAC/B;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC,EAAE,MAAM,MAAM,MAAM,cAAc,CAAC,MAAM,4BAA4B;AAAA,MAC5E,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,YAAI,CAAC,QAAQ,KAAM,OAAM,IAAI,MAAM,0BAA0B;AAC7D,cAAM,WAAW,MAAM,8BAA8B,CAAC;AACtD,cAAM,gBAA0C;AAAA,UAC9C,GAAG,QAAQ;AAAA,UACX,sBAAsB;AAAA,QACxB;AACA,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,YAAY,QAAQ,MAAO,aAAa,CAAC;AAC9F,gBAAQ,eAAe;AACvB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,gCAAgC,iBAAiB,+BAA+B;AAE7F,SAAS,4BAA4B,YAAsB,SAA4C;AACrG,QAAM,WAAW,oBAAI,IAAY;AACjC,QAAM,UAAoB,CAAC;AAC3B,aAAW,aAAa,YAAY;AAClC,UAAM,UAAU,eAAe,WAAW,OAAO;AACjD,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,KAAK,SAAS;AAAA,IACxB,OAAO;AACL,cAAQ,QAAQ,CAAC,QAAQ,SAAS,IAAI,GAAG,CAAC;AAAA,IAC5C;AAAA,EACF;AACA,SAAO,EAAE,UAAU,MAAM,KAAK,QAAQ,GAAG,QAAQ;AACnD;AAEA,SAAS,eAAe,WAAmB,SAA4C;AACrF,QAAM,SAAS,UAAU,KAAK,EAAE,YAAY;AAC5C,MAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,QAAM,UAAoB,CAAC;AAC3B,aAAW,YAAY,QAAQ,YAAY;AACzC,UAAM,aAAa,SAAS,GAAG,YAAY;AAC3C,QAAI,eAAe,QAAQ;AACzB,eAAS,SAAS,QAAQ,CAAC,YAAY,QAAQ,KAAK,QAAQ,GAAG,CAAC;AAChE;AAAA,IACF;AACA,eAAW,WAAW,SAAS,UAAU;AACvC,YAAM,WAAW,QAAQ,IAAI,YAAY;AACzC,YAAM,iBAAiB,QAAQ,WAAW,YAAY;AACtD,YAAM,aAAa,QAAQ,OAAO,YAAY;AAC9C,YAAM,YAAY,QAAQ,MAAM,YAAY;AAC5C,UACE,WAAW,YACV,kBAAkB,WAAW,kBAC7B,cAAc,WAAW,cACzB,aAAa,WAAW,aACzB,WAAW,GAAG,UAAU,IAAI,cAAc,IAC1C;AACA,gBAAQ,KAAK,QAAQ,GAAG;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAe,wBAAwBC,SAA2B,SAAiC;AACjG,QAAM,aAAaA,QAAO,cAAc,KAAK,IAAI,OAAO,QAAQ,oBAAoB,KAAK,GAAG;AAC5F,QAAM;AAAA,IAAW,CAAC,WAChB,OAAO,wBAAwB;AAAA,MAC7B,WAAWA,QAAO;AAAA,MAClB,YAAYA,QAAO;AAAA,MACnB;AAAA,MACA,MAAMA,QAAO,QAAQ;AAAA,MACrB,UAAU;AAAA,QACR,WAAW,QAAQ;AAAA,QACnB,iBAAiB,QAAQ;AAAA,MAC3B;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACxKA,IAAM,iCAA6G;AAAA,EACjH,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,OAAO,EAAE,kBAAkB,CAAC,GAAG,iBAAiB,CAAC,EAAE;AAAA,EAClE,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,YAAY,WAAW,CAAC,WAAW,OAAO,wBAAwB,CAAC;AAAA,IAC1E;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,OAAO,QAAQ,GAAG,YAAY;AAC1C,cAAM,WAAW;AACjB,cAAM,aAAa,MAAM,iBAAiB,SAAS,MAAM,kBAAkB,yBAAyB,QAAQ;AAC5G,cAAM,EAAE,UAAU,QAAQ,IAAI,yBAAyB,YAAY,QAAQ;AAC3E,gBAAQ,mBAAmB;AAC3B,gBAAQ,kBAAkB;AAC1B,eAAO,EAAE,UAAU,QAAQ;AAAA,MAC7B;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM;AAAA,MAC5B,KAAK,OAAO,EAAE,MAAM,MAAM,WAAW,CAAC,WAAW,OAAO,sBAAsB,MAAM,kBAAmB,CAAC;AAAA,IAC1G;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,SAAS,OAAO,MAAM;AACzC,cAAM,gBAA4C;AAAA,UAChD,SAAS,yBAAyB,MAAM,SAAS,QAAQ,gBAAgB;AAAA,UACzE,8BAA8B,QAAQ;AAAA,UACtC,4BAA4B,MAAM;AAAA,UAClC,YAAY,MAAM;AAAA,UAClB,aAAa,MAAM;AAAA,QACrB;AACA,cAAM,SAAS,MAAM,8BAA8B,IAAI,eAAe,EAAE,OAAO,CAAC;AAChF,gBAAQ,iBAAiB;AACzB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,+BAA+B,iBAAiB,8BAA8B;AAE3F,SAAS,yBAAyB,YAAsB,SAA4C;AAClG,QAAM,WAAW,oBAAI,IAAY;AACjC,QAAM,UAAoB,CAAC;AAC3B,aAAW,QAAQ,CAAC,UAAU;AAC5B,UAAMC,cAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,QAAI,CAACA,YAAY;AACjB,QAAI,UAAU;AACd,eAAW,cAAc,QAAQ,YAAY;AAC3C,UAAI,CAAC,WAAW,GAAG,YAAY,EAAE,WAAW,UAAU,EAAG;AACzD,iBAAW,WAAW,WAAW,UAAU;AACzC,cAAM,aAAa,CAAC,QAAQ,KAAK,QAAQ,WAAW,QAAQ,OAAO,QAAQ,IAAI,EAC5E,IAAI,CAAC,UAAU,OAAO,YAAY,EAAE,KAAK,CAAC,EAC1C,OAAO,OAAO;AACjB,YAAI,WAAW,SAASA,WAAU,KAAK,GAAG,WAAW,GAAG,YAAY,CAAC,IAAI,QAAQ,WAAW,YAAY,CAAC,OAAOA,aAAY;AAC1H,mBAAS,IAAI,QAAQ,GAAG;AACxB,oBAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,SAAS;AACZ,cAAQ,KAAK,KAAK;AAAA,IACpB;AAAA,EACF,CAAC;AACD,SAAO,EAAE,UAAU,MAAM,KAAK,QAAQ,GAAG,QAAQ;AACnD;AAEA,SAAS,yBAAyB,SAA4C;AAC5E,QAAM,WAAW,QAAQ,WAAW,KAAK,CAAC,UAAU,MAAM,GAAG,YAAY,MAAM,UAAU;AACzF,MAAI,CAAC,SAAU,QAAO,CAAC;AACvB,SAAO,SAAS,SAAS,IAAI,CAAC,YAAY,QAAQ,GAAG;AACvD;AAEA,SAAS,yBAAyB,SAAmC,UAAoB;AACvF,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,SAAO,EAAE,GAAG,SAAS,sBAAsB,SAAS;AACtD;;;AC9EA,IAAM,sBAA4E;AAAA,EAChF,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,OAAO,CAAC;AAAA,EACvB,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM;AAAA,MAC5B,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,cAAM,eAAe,MAAM,WAAW,CAAC,WAAW,OAAO,sBAAsB,MAAM,kBAAmB,CAAC;AACzG,gBAAQ,qBAAqB;AAC7B,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,KAAK,OAAO,EAAE,QAAQ,MAAM;AAC1B,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,gBAAgB,CAAC;AACtE,gBAAQ,WAAW;AACnB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,QAAQ,MAAM;AACjC,cAAM,UAAoC;AAAA,UACxC,WAAW,MAAM;AAAA,UACjB,SAAS,MAAM;AAAA,UACf,WAAW,MAAM;AAAA,UACjB,aAAa,MAAM;AAAA,UACnB,UAAU,MAAM;AAAA,UAChB,eAAe,MAAM;AAAA,UACrB,SAAS,MAAM;AAAA,UACf,QAAQ,MAAM;AAAA,QAChB;AACA,cAAM,WAAW,MAAM,WAAW,CAAC,WAAW,OAAO,mBAAmB,OAAO,CAAC;AAChF,gBAAQ,WAAW;AACnB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,oBAAoB,iBAAiB,mBAAmB;;;ACjDrE,IAAM,wBAAuF;AAAA,EAC3F,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,OAAO,CAAC;AAAA,EACvB,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM;AAAA,MAC5B,KAAK,OAAO,EAAE,OAAO,OAAO,MAC1B,kBAAkB;AAAA,QAChB;AAAA,UACE,WAAW,MAAM,eAAgB;AAAA,UACjC,SAAS,MAAM,eAAgB;AAAA,UAC/B,eAAe,MAAM,eAAgB;AAAA,UACrC,SAAS,MAAM,eAAgB;AAAA,UAC/B,oBAAoB,MAAM,eAAgB;AAAA,QAC5C;AAAA,QACA,EAAE,OAAO;AAAA,MACX;AAAA,IACJ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,OAAO,MAC1B,6BAA6B;AAAA,QAC3B;AAAA,UACE,SAAS,MAAM;AAAA,UACf,iBAAiB,MAAM;AAAA,UACvB,aAAa;AAAA,QACf;AAAA,QACA,EAAE,OAAO;AAAA,MACX;AAAA,IACJ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM;AAAA,MAC5B,KAAK,OAAO,EAAE,OAAO,SAAS,OAAO,MAAM;AACzC,cAAM,OAAQ,SAAS,SAAiB,oBAAoB,SAAS;AACrE,YAAI,CAAC,KAAM,OAAM,IAAI,MAAM,iCAAiC;AAC5D,eAAO,aAAa,IAAI,EAAE,MAAM,SAAS,MAAM,YAAY,GAAG,EAAE,OAAO,CAAC;AAAA,MAC1E;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,sBAAsB,iBAAiB,qBAAqB;;;AChDzE,IAAM,6BAAiG;AAAA,EACrG,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa,CAAC,yBAAyB;AAAA,EACvC,eAAe,OAAO,CAAC;AAAA,EACvB,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,OAAO,MAC1B,kBAAkB;AAAA,QAChB;AAAA,UACE,WAAW,MAAM,KAAK;AAAA,UACtB,SAAS,MAAM,KAAK;AAAA,UACpB,eAAe,MAAM,KAAK;AAAA,UAC1B,oBAAoB,MAAM,KAAK;AAAA,QACjC;AAAA,QACA,EAAE,OAAO;AAAA,MACX;AAAA,IACJ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,KAAK,OAAO,EAAE,OAAO,OAAO,MAAM,8BAA8B,IAAI,EAAE,SAAS,MAAM,QAAQ,GAAG,EAAE,OAAO,CAAC;AAAA,IAC5G;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM;AAAA,MAC5B,KAAK,OAAO,EAAE,OAAO,SAAS,OAAO,MAAM;AACzC,cAAM,OAAQ,QAAQ,SAAiB,oBAAoB,SAAS;AACpE,YAAI,CAAC,KAAM,OAAM,IAAI,MAAM,iCAAiC;AAC5D,eAAO,aAAa,IAAI,EAAE,MAAM,SAAS,MAAM,YAAY,GAAG,EAAE,OAAO,CAAC;AAAA,MAC1E;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,2BAA2B,iBAAiB,0BAA0B;;;AxBjBnF,IAAM,kBAA8CC,GACjD,OAAO;AAAA,EACN,MAAMA,GAAE,KAAK,CAAC,UAAU,SAAS,UAAU,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC/D,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAUA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACnC,SAASA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,EAAE,SAAS;AACnD,CAAC,EACA,QAAQ;AAEX,IAAM,oBAAyDA,GAAE,OAAO;AAAA,EACtE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,mBAAmBA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACxD,MAAM,gBAAgB,SAAS;AACjC,CAAC;AAED,IAAM,oBAAuDA,GAAE,OAAO;AAAA,EACpE,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,SAASA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACzB,MAAM,gBAAgB,SAAS;AACjC,CAAC;AAED,IAAM,oBAAmDA,GAAE,OAAO;AAAA,EAChE,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,iBAAiBA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,EAClD,MAAM,gBAAgB,SAAS;AACjC,CAAC;AAED,IAAM,cAAcA,GAAE,OAAO;AAAA,EAC3B,GAAGA,GAAE,OAAO,EAAE,SAAS;AAAA,EACvB,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE;AAAA,EACjD,cAAcA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC3C,YAAYA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,UAAUA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACpD,UAAUA,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,QAAQA,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,QAAQA,GAAE,KAAK,CAAC,SAAS,WAAW,aAAa,CAAC,EAAE,SAAS;AAAA,EAC7D,WAAWA,GAAE,KAAK,CAAC,OAAO,MAAM,CAAC,EAAE,SAAS;AAAA,EAC5C,UAAUA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,MAAMA,GAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EAC7D,MAAMA,GAAE,KAAK,CAAC,aAAa,aAAa,CAAC,EAAE,SAAS;AACtD,CAAC;AAED,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACjC,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC;AAClD,CAAC;AAED,IAAM,YAAYA,GAAE,OAAO,EAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;AAEtD,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EACnC,SAAS;AACX,CAAC;AAED,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EACtC,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAClD,CAAC;AAED,IAAM,4BAA4BA,GAAE,OAAO;AAAA,EACzC,SAAS;AACX,CAAC;AAED,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACjC,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,SAASA,GAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAED,IAAM,mBAAmBA,GAAE,OAAO,CAAC,CAAC;AAEpC,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACjC,qBAAqB;AAAA,EACrB,gBAAgBA,GAAE,OAAO,EAAE,SAAS;AAAA,EACpC,aAAaA,GAAE,OAAO,EAAE,SAAS;AACnC,CAAC;AAED,IAAM,2BAA2BA,GAAE,OAAO;AAAA,EACxC,WAAWA,GAAE,OAAO;AAAA,EACpB,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,GAAK;AAAA,EACrD,WAAWA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,IAAI,KAAK,GAAI;AAC9D,CAAC;AAED,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EACnC,SAASA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC;AAAA,EACxC,MAAMA,GAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAED,IAAM,iBAAiBA,GAAE,OAAO,EAAE,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;AAEhE,IAAM,cAAcA,GAAE,OAAO,CAAC,CAAC;AAE/B,IAAM,mBAAmBA,GAAE,OAAO;AAAA,EAChC,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,SAAS;AACX,CAAC;AAED,IAAM,yBAAyBA,GAAE,OAAO;AAAA,EACtC,UAAUA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC1B,OAAOA,GAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAED,IAAM,qBAAqBA,GAAE,OAAO;AAAA,EAClC,iBAAiBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC5C,eAAeA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAC5C,CAAC;AAED,IAAM,oBAAoBA,GAAE,KAAK,CAAC,WAAW,SAAS,CAAC;AAEvD,IAAM,uBAAuBA,GAAE,OAAO;AAAA,EACpC,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,SAAS;AACX,CAAC;AAED,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACjC,aAAaA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC7B,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,SAAS;AAAA,EACT,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,eAAeA,GAAE,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,SAAS;AAAA,EAC/C,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,kBAAkBA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACzD,CAAC;AAED,IAAM,oBAAoDA,GAAE,OAAO;AAAA,EACjE,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,YAAYA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAUA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC,EAAE,SAAS;AACnD,CAAC;AAED,IAAM,eAAeA,GAAE,OAAO;AAAA,EAC5B,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,WAAWA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,UAAUA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACjD,eAAeA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC/B,SAASA,GAAE,KAAK,CAAC,QAAQ,cAAc,CAAC,EAAE,SAAS;AAAA,EACnD,QAAQA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AACpC,CAAC;AAEM,IAAM,MAAM,IAAI,QAAQ;AAAA,EAC7B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AACf,CAAC;AASM,IAAM,kBAAoC;AAAA,EAC/C;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,UAAU,WAAW,CAAC,WAAW,OAAO,OAAO,KAAK,CAAC;AAAA,EACjE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,UAAU,WAAW,CAAC,WAAW,OAAO,aAAa,KAAK,CAAC;AAAA,EACvE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,EAAE,KAAK,MACf,WAAW,OAAO,WAAW;AAC3B,YAAM,CAAC,UAAU,YAAY,MAAM,IAAI,MAAM,QAAQ,IAAI;AAAA,QACvD,OAAO,YAAY,IAAI;AAAA,QACvB,OAAO,aAAa,IAAI;AAAA,QACxB,OAAO,wBAAwB,IAAI;AAAA,MACrC,CAAC;AACD,aAAO,EAAE,UAAU,YAAY,OAAO;AAAA,IACxC,CAAC;AAAA,EACL;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,EAAE,KAAK,MAAM,WAAW,CAAC,WAAW,OAAO,oBAAoB,IAAI,CAAC;AAAA,EAChF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,EAAE,QAAQ,MAAM,WAAW,CAAC,WAAW,OAAO,qBAAqB,OAAO,CAAC;AAAA,EACvF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,EAAE,QAAQ,MAAM,WAAW,CAAC,WAAW,OAAO,cAAc,OAAO,CAAC;AAAA,EAChF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,EAAE,WAAW,YAAY,UAAU,MAC3C;AAAA,MAAW,CAAC,WACV,OAAO,8BAA8B,WAAW;AAAA,QAC9C;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACJ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,WAAW,CAAC,WAAW,OAAO,YAAY,MAAM,OAA6B,CAAC;AAAA,EAChH;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,MAAM,WAAW,CAAC,WAAW,OAAO,wBAAwB,CAAC;AAAA,EACxE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,EAAE,UAAU,MAAM,MAC1B,WAAW,CAAC,WAAW,OAAO,0BAA0B,UAAU,KAAK,CAAC;AAAA,EAC5E;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,UAAU,WAAW,CAAC,WAAW,OAAO,KAAK,cAAc,KAAK,CAAC;AAAA,EAC7E;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,UAAU,WAAW,CAAC,WAAW,OAAO,KAAK,YAAY,KAAK,CAAC;AAAA,EAC3E;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,EAAE,UAAU,MAAM,WAAW,CAAC,WAAW,OAAO,KAAK,WAAW,SAAS,CAAC;AAAA,EACtF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,UAAU,WAAW,CAAC,WAAW,OAAO,KAAK,eAAe,KAAK,CAAC;AAAA,EAC9E;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,EAAE,UAAU,MAAM,WAAW,CAAC,WAAW,OAAO,KAAK,WAAW,SAAS,CAAC;AAAA,EACtF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,MAAM,cAAc,qBAAqB,MAAM,WAAW,CAAC,WAAW,OAAO,cAAc,CAAC,CAAC;AAAA,EACxG;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,UACR,cAAc,sBAAsB,MAAM,WAAW,CAAC,WAAW,OAAO,eAAe,KAAY,CAAC,CAAC;AAAA,EACzG;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,MAAM,WAAW,CAAC,WAAW,OAAO,MAAM,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,MAAM,WAAW,CAAC,WAAW,OAAO,eAAe,CAAC;AAAA,EAC/D;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,MAAM,WAAW,CAAC,WAAW,OAAO,eAAe,CAAC;AAAA,EAC/D;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,MAAM,WAAW,CAAC,WAAW,OAAO,eAAe,CAAC;AAAA,EAC/D;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,UAAU,WAAW,CAAC,WAAW,OAAO,sBAAsB,KAA+B,CAAC;AAAA,EAC1G;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,UAAU,WAAW,CAAC,WAAW,OAAO,sBAAsB,KAA4B,CAAC;AAAA,EACvG;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,UAAU,WAAW,CAAC,WAAW,OAAO,wBAAwB,KAAK,CAAC;AAAA,EAClF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,OAAO,UAAU;AACxB,YAAM,kBAAkB,MAAM;AAC9B,YAAM,CAAC,eAAe,eAAe,WAAW,IAAI,MAAM,QAAQ,IAAI;AAAA,QACpE,iBAAiB;AAAA,QACjB,kBAAkB,kBAAkB,UAAU,eAAe,IAAI,QAAQ,QAAQ,IAAI;AAAA,QACrF,MAAM,gBAAgB,kBAAkB,QAAQ,MAAM,aAAa,IAAI,QAAQ,QAAQ,IAAI;AAAA,MAC7F,CAAC;AACD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,MAAM,WAAW,CAAC,WAAW,OAAO,gBAAgB,CAAC;AAAA,EAChE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,CAAC,UAAU,WAAW,CAAC,WAAW,OAAO,mBAAmB,KAAK,CAAC;AAAA,EAC7E;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,OAAO,UAAU,qBAAqB,MAAM,kBAAkB,IAAI,KAAK,CAAC;AAAA,EACnF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,OAAO,EAAE,QAAQ,MAAM,qBAAqB,MAAM,qBAAqB,IAAI,EAAE,QAAQ,CAAC,CAAC;AAAA,EAClG;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,OAAO,UAAU,qBAAqB,MAAM,aAAa,IAAI,KAAK,CAAC;AAAA,EAC9E;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,YAAY,qBAAqB,MAAM,YAAY,IAAI,CAAC,CAAC,CAAC;AAAA,EACrE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQA,GAAE,OAAO,EAAE,SAASA,GAAE,OAAO,EAAE,IAAI,CAAC,GAAG,UAAUA,GAAE,OAAO,EAAE,SAAS,GAAG,SAASA,GAAE,OAAO,GAAG,WAAWA,GAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAAA,IACvI,SAAS,OAAO,UAAU,qBAAqB,MAAM,uBAAuB,IAAI,KAAK,CAAC;AAAA,EACxF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQA,GAAE,OAAO,EAAE,OAAOA,GAAE,OAAO,EAAE,SAAS,GAAG,MAAMA,GAAE,OAAO,EAAE,SAAS,GAAG,SAASA,GAAE,OAAO,EAAE,SAAS,GAAG,oBAAoBA,GAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAAA,IAC1J,SAAS,OAAO,UAAU,qBAAqB,MAAM,+BAA+B,IAAI,KAAK,CAAC;AAAA,EAChG;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQA,GAAE,OAAO;AAAA,MACf,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACtB,gBAAgBA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MAChC,cAAcA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MAC9B,mBAAmBA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACnC,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IACnD,CAAC;AAAA,IACD,SAAS,OAAO,UAAU,qBAAqB,MAAM,yBAAyB,IAAI,KAAK,CAAC;AAAA,EAC1F;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQA,GAAE,OAAO,EAAE,OAAOA,GAAE,OAAO,EAAE,SAAS,GAAG,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAAA,IAChG,SAAS,OAAO,UAAU,qBAAqB,MAAM,yBAAyB,IAAI,KAAK,CAAC;AAAA,EAC1F;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQA,GAAE,OAAO;AAAA,MACf,SAAS;AAAA,MACT,iBAAiBA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,MAC9C,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,IACnC,CAAC;AAAA,IACD,SAAS,OAAO,UAAU,qBAAqB,MAAM,oBAAoB,IAAI,KAAK,CAAC;AAAA,EACrF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQA,GAAE,OAAO;AAAA,MACf,SAAS;AAAA,MACT,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,IACnC,CAAC;AAAA,IACD,SAAS,OAAO,UAAU,qBAAqB,MAAM,yBAAyB,IAAI,KAAK,CAAC;AAAA,EAC1F;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS,OAAO,UAAU,qBAAqB,MAAM,qBAAqB,IAAI,KAAK,CAAC;AAAA,EACtF;AACF;AAEA,SAAS,qBAAqB,QAAoC;AAChE,QAAM,eAAe;AAAA,IACnB,aAAa,OAAO,QAAQ;AAAA,IAC5B,OAAO,SAAS,cAAc;AAAA,IAC9B,OAAO,SAAS,OAAO,SAAS,OAAO,QAAQ,IAAI,KAAK;AAAA,IACxD,mBAAmB,OAAO,MAAM,MAAM;AAAA,EACxC,EAAE,OAAO,OAAO;AAEhB,SAAO;AAAA,IACL,SAAS;AAAA,MACP,EAAE,MAAM,QAAQ,MAAM,aAAa,KAAK,IAAI,EAAE;AAAA,MAC9C,mBAAmB,mBAAmB,MAAM;AAAA,IAC9C;AAAA,IACA,mBAAmB;AAAA,EACrB;AACF;AAEO,SAAS,gBAAwC,YAA+B;AACrF,SAAO;AAAA,IACL,MAAM,WAAW;AAAA,IACjB,aAAa,WAAW;AAAA,IACxB,YAAY,WAAW;AAAA,IACvB,SAAS,OAAO,MAAkB,YAAsB;AACtD,YAAM,YAAY,SAAS,aAAa,WAAW;AACnD,YAAM,UAAU,KAAK,IAAI;AACzB,UAAI;AACF,cAAM,cAAc,WAAW,OAAO,MAAM,IAAI;AAChD,eAAO,MAAM,EAAE,WAAW,MAAM,WAAW,KAAK,GAAG,aAAa;AAChE,cAAM,SAAS,MAAM,WAAW,QAAQ,WAAyB;AACjE,eAAO;AAAA,UACL;AAAA,YACE;AAAA,YACA,MAAM,WAAW;AAAA,YACjB,YAAY,KAAK,IAAI,IAAI;AAAA,UAC3B;AAAA,UACA;AAAA,QACF;AACA,eAAO,gBAAgB,MAAM;AAAA,MAC/B,SAAS,OAAO;AACd,eAAO;AAAA,UACL;AAAA,YACE;AAAA,YACA,MAAM,WAAW;AAAA,YACjB,YAAY,KAAK,IAAI,IAAI;AAAA,YACzB,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC9D;AAAA,UACA;AAAA,QACF;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,WAAW,cAAc,iBAAiB;AACxC,MAAI,QAAQ,gBAAgB,UAAU,CAAC;AACzC;AAEO,IAAM,kBAAkB;AAE/B,SAAS,eAAe,OAAkC;AACxD,SAAO;AAAA,IACL,SACA,OAAO,UAAU,YACjB,UAAW,SACX,OAAQ,MAAkC,SAAS;AAAA,EACrD;AACF;AAEA,SAAS,gBAAgB,OAAwG;AAC/H,MAAI,cAAc,KAAK,GAAG;AACxB,UAAM,SAAS;AACf,WAAO;AAAA,MACL,SAAS,iBAAiB,OAAO,OAAO;AAAA,MACxC,mBAAmB,cAAc,OAAO,iBAAiB,IAAK,OAAO,oBAAgD;AAAA,MACrH,SAAS,OAAO,OAAO,YAAY,YAAa,OAAO,UAAsB;AAAA,IAC/E;AAAA,EACF;AACA,MAAI,cAAc,KAAK,GAAG;AACxB,WAAO;AAAA,MACL,SAAS,CAAC,mBAAmB,eAAe,KAAgC,CAAC;AAAA,MAC7E,mBAAmB;AAAA,IACrB;AAAA,EACF;AACA,SAAO,EAAE,SAAS,iBAAiB,KAAK,EAAE;AAC5C;AAEA,SAAS,iBAAiB,QAA4B;AACpD,MAAI,MAAM,QAAQ,MAAM,KAAK,OAAO,MAAM,cAAc,GAAG;AACzD,WAAO;AAAA,EACT;AACA,MAAI,eAAe,MAAM,GAAG;AAC1B,WAAO,CAAC,MAAM;AAAA,EAChB;AACA,MAAI,WAAW,UAAa,WAAW,MAAM;AAC3C,WAAO,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,CAAC;AAAA,EACtC;AACA,MAAI,OAAO,WAAW,YAAY,OAAO,WAAW,YAAY,OAAO,WAAW,WAAW;AAC3F,WAAO,CAAC,EAAE,MAAM,QAAQ,MAAM,OAAO,MAAM,EAAE,CAAC;AAAA,EAChD;AACA,MAAI,cAAc,MAAM,GAAG;AACzB,WAAO,CAAC,mBAAmB,eAAe,MAAiC,CAAC;AAAA,EAC9E;AACA,SAAO,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,MAAM,EAAE,CAAC;AACxD;AAEA,SAAS,mBAAmB,MAAc,OAAyC;AACjF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,GAAG,IAAI;AAAA,EAAM,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,EACnD;AACF;AAEA,SAAS,cAAc,OAAgG;AACrH,SAAO,QAAQ,SAAS,OAAO,UAAU,aAAa,aAAc,SAAqC,uBAAwB,MAAkC;AACrK;AAEA,SAAS,cAAc,OAAkD;AACvE,SAAO,QAAQ,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,CAAC;AAC5E;AAEA,eAAe,cAAiB,OAAe,IAAsB;AACnE,MAAI;AACF,WAAO,MAAM,GAAG;AAAA,EAClB,SAAS,OAAO;AACd,QAAI,iBAAiBC,sBAAqB;AACxC,YAAM,OAAO,OAAO,MAAM,SAAS,WAAW,KAAK,UAAU,MAAM,IAAI,IAAI,OAAO,MAAM,IAAI;AAC5F,YAAM,IAAI,MAAM,GAAG,KAAK,YAAY,MAAM,MAAM,IAAI,MAAM,cAAc,EAAE,MAAM,IAAI,EAAE;AAAA,IACxF;AACA,UAAM;AAAA,EACR;AACF;AAEA,eAAe,kBAAkB,OAA0B,WAAmB;AAC5E,MAAI;AACF,WAAO,MAAM,iBAAiB,SAAS;AAAA,EACzC,SAAS,OAAO;AACd,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,WAAO,EAAE,OAAO,GAAG,KAAK,yBAAyB,OAAO,IAAI,UAAU;AAAA,EACxE;AACF;AAEA,IAAI,YAAY;AAAA,EACd,MAAM;AAAA,EACN,KAAK;AAAA,EACL,UAAU;AAAA,EACV,MAAM,YAAY;AAAA,IAChB;AAAA,MACE,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,KAAK,IAAI;AAAA,IACb;AAAA,EACF;AACF,CAAC;;;AD1mBD,IAAM,WAAW;AAEjB,eAAsB,WAAW;AAC/B,SAAO,KAAK,0BAA0B;AACtC,QAAM,IAAI,MAAM,EAAE,eAAe,QAAQ,CAAC;AAC1C,SAAO,KAAK,yBAAyB;AACvC;AAEA,eAAsB,SAAS;AAC7B,QAAM,eAAe,OAAO,kBAAkB,OAAO,OAAO;AAC5D,QAAM,uBAAuB,YAAY;AAEzC,QAAM,UAAU,oBAAoB,YAAY;AAChD,QAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,YAAQ,KAAK,SAAS,MAAM;AAC5B,YAAQ,OAAO,OAAO,MAAM,MAAM;AAChC,aAAO,KAAK,EAAE,MAAM,OAAO,MAAM,aAAa,GAAG,mBAAmB;AACpE,cAAQ;AAAA,IACV,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAe,uBAAuB,MAAc;AAClD,QAAM,IAAI,MAAM;AAAA,IACd,eAAe;AAAA,IACf,YAAY;AAAA,MACV;AAAA,MACA,MAAM;AAAA,MACN,UAAU;AAAA,MACV,oBAAoB;AAAA,IACtB;AAAA,EACF,CAAC;AACD,SAAO,KAAK,EAAE,KAAK,GAAG,2BAA2B;AACnD;AAEO,SAAS,oBAAoB,cAAsB;AACxD,SAAO,KAAK,aAAa,qBAAqB,YAAY,CAAC;AAC7D;AAEO,SAAS,qBAAqB,cAAsB;AACzD,SAAO,CAAC,KAAsB,QAAwB;AACpD,QAAI,CAAC,IAAI,KAAK;AACZ,UAAI,UAAU,GAAG,EAAE,IAAI,aAAa;AACpC;AAAA,IACF;AACA,QAAI,IAAI,IAAI,WAAW,UAAU,GAAG;AAClC,YAAM,OAAO,KAAK,UAAU;AAAA,QAC1B,QAAQ;AAAA,QACR,QAAQ,QAAQ,OAAO;AAAA,QACvB,OAAO,gBAAgB;AAAA,QACvB,WAAWC,YAAW;AAAA,MACxB,CAAC;AACD,UAAI,UAAU,KAAK,EAAE,gBAAgB,mBAAmB,CAAC;AACzD,UAAI,IAAI,IAAI;AACZ;AAAA,IACF;AACA,iBAAa,KAAK,KAAK,YAAY;AAAA,EACrC;AACF;AAEA,SAAS,aAAa,KAAsB,KAAqB,cAAsB;AACrF,SAAO,MAAM,EAAE,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,GAAG,iBAAiB;AACpE,QAAM,WAAW,KAAK;AAAA,IACpB;AAAA,MACE,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ,IAAI;AAAA,MACZ,MAAM,IAAI;AAAA,MACV,SAAS;AAAA,QACP,GAAG,IAAI;AAAA,QACP,MAAM,GAAG,QAAQ,IAAI,YAAY;AAAA,MACnC;AAAA,IACF;AAAA,IACA,CAAC,aAAa;AACZ,UAAI,UAAU,SAAS,cAAc,KAAK,SAAS,OAAO;AAC1D,eAAS,KAAK,GAAG;AAAA,IACnB;AAAA,EACF;AAEA,WAAS,GAAG,SAAS,CAAC,UAAU;AAC9B,WAAO,MAAM,EAAE,MAAM,GAAG,aAAa;AACrC,QAAI,CAAC,IAAI,aAAa;AACpB,UAAI,UAAU,GAAG;AAAA,IACnB;AACA,QAAI,IAAI,gBAAgB;AAAA,EAC1B,CAAC;AAED,MAAI,IAAI,UAAU,CAAC,QAAQ,OAAO,OAAO,EAAE,SAAS,IAAI,MAAM,GAAG;AAC/D,UAAM,MAAM,IAAI,YAAY;AAC5B,QAAI,UAAU;AACd,QAAI,GAAG,QAAQ,CAAC,UAAU;AACxB,UAAI,QAAQ,SAAS,KAAK;AACxB,mBAAW,MAAM,SAAS;AAAA,MAC5B;AAAA,IACF,CAAC;AACD,QAAI,GAAG,OAAO,MAAM;AAClB,UAAI,QAAQ,QAAQ;AAClB,eAAO,MAAM,EAAE,SAAS,QAAQ,MAAM,GAAG,GAAG,EAAE,GAAG,eAAe;AAAA,MAClE;AAAA,IACF,CAAC;AACD,QAAI,KAAK,GAAG,EAAE,KAAK,QAAQ;AAAA,EAC7B,OAAO;AACL,QAAI,KAAK,QAAQ;AAAA,EACnB;AACF;;;A0B5GA,IAAM,aAAa,QAAQ,IAAI,iBAAiB,OAAO,YAAY;AAEnE,IAAI,cAAc,SAAS;AACzB,SAAO,KAAK,EAAE,UAAU,GAAG,qBAAqB;AAChD,WAAS,EAAE,MAAM,CAAC,QAAQ;AACxB,WAAO,MAAM,EAAE,IAAI,GAAG,iCAAiC;AACvD,YAAQ,WAAW;AAAA,EACrB,CAAC;AACH,OAAO;AACL,SAAO,KAAK,EAAE,UAAU,GAAG,qBAAqB;AAChD,SAAO,EAAE,MAAM,CAAC,QAAQ;AACtB,WAAO,MAAM,EAAE,IAAI,GAAG,+BAA+B;AACrD,YAAQ,WAAW;AAAA,EACrB,CAAC;AACH;","names":["randomUUID","RegistryBrokerError","z","z","config","normalized","z","RegistryBrokerError","randomUUID"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hol-org/hashnet-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "FastMCP server exposing Hashgraph Online Registry Broker tooling.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -28,26 +28,6 @@
|
|
|
28
28
|
"AGENTS.md",
|
|
29
29
|
"todo.md"
|
|
30
30
|
],
|
|
31
|
-
"scripts": {
|
|
32
|
-
"dev:stdio": "MCP_TRANSPORT=stdio tsx src/index.ts",
|
|
33
|
-
"dev:sse": "tsx src/index.ts",
|
|
34
|
-
"build": "tsup --config tsup.config.ts",
|
|
35
|
-
"start": "node dist/index.js",
|
|
36
|
-
"quickstart": "tsx scripts/quickstart.ts",
|
|
37
|
-
"test": "vitest",
|
|
38
|
-
"test:run": "vitest run",
|
|
39
|
-
"test:coverage": "vitest run --coverage",
|
|
40
|
-
"test:tools": "tsx scripts/run-tool-suite.ts --spawn",
|
|
41
|
-
"test:tools:mock": "tsx scripts/run-tool-suite.ts --mock",
|
|
42
|
-
"workflow:list": "tsx scripts/list-workflows.ts",
|
|
43
|
-
"workflow:run": "tsx scripts/run-workflow.ts",
|
|
44
|
-
"workflow:register": "tsx scripts/workflow-register.ts",
|
|
45
|
-
"workflow:register:advanced": "tsx scripts/workflow-register-advanced.ts",
|
|
46
|
-
"workflow:register:erc8004": "tsx scripts/workflow-register-erc8004.ts",
|
|
47
|
-
"mock:broker": "tsx scripts/mock-broker.ts",
|
|
48
|
-
"claude:install": "tsx scripts/install-claude-code.ts",
|
|
49
|
-
"cursor:install": "tsx scripts/install-cursor.ts"
|
|
50
|
-
},
|
|
51
31
|
"homepage": "https://hashgraphonline.com",
|
|
52
32
|
"funding": {
|
|
53
33
|
"type": "individual",
|
|
@@ -77,7 +57,6 @@
|
|
|
77
57
|
"engines": {
|
|
78
58
|
"node": ">=18"
|
|
79
59
|
},
|
|
80
|
-
"packageManager": "pnpm@10.10.0",
|
|
81
60
|
"devDependencies": {
|
|
82
61
|
"@types/node": "^24.10.0",
|
|
83
62
|
"@vitest/coverage-v8": "^2.1.4",
|
|
@@ -101,5 +80,25 @@
|
|
|
101
80
|
},
|
|
102
81
|
"overrides": {
|
|
103
82
|
"@hashgraphonline/standards-sdk": "^0.1.136"
|
|
83
|
+
},
|
|
84
|
+
"scripts": {
|
|
85
|
+
"dev:stdio": "MCP_TRANSPORT=stdio tsx src/index.ts",
|
|
86
|
+
"dev:sse": "tsx src/index.ts",
|
|
87
|
+
"build": "tsup --config tsup.config.ts",
|
|
88
|
+
"start": "node dist/index.js",
|
|
89
|
+
"quickstart": "tsx scripts/quickstart.ts",
|
|
90
|
+
"test": "vitest",
|
|
91
|
+
"test:run": "vitest run",
|
|
92
|
+
"test:coverage": "vitest run --coverage",
|
|
93
|
+
"test:tools": "tsx scripts/run-tool-suite.ts --spawn",
|
|
94
|
+
"test:tools:mock": "tsx scripts/run-tool-suite.ts --mock",
|
|
95
|
+
"workflow:list": "tsx scripts/list-workflows.ts",
|
|
96
|
+
"workflow:run": "tsx scripts/run-workflow.ts",
|
|
97
|
+
"workflow:register": "tsx scripts/workflow-register.ts",
|
|
98
|
+
"workflow:register:advanced": "tsx scripts/workflow-register-advanced.ts",
|
|
99
|
+
"workflow:register:erc8004": "tsx scripts/workflow-register-erc8004.ts",
|
|
100
|
+
"mock:broker": "tsx scripts/mock-broker.ts",
|
|
101
|
+
"claude:install": "tsx scripts/install-claude-code.ts",
|
|
102
|
+
"cursor:install": "tsx scripts/install-cursor.ts"
|
|
104
103
|
}
|
|
105
|
-
}
|
|
104
|
+
}
|