chain-insights 0.65.0 → 0.65.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +9 -7
- package/dist/cli.mjs +9 -7
- package/dist/cli.mjs.map +1 -1
- package/dist/mcp-proxy.cjs +14 -176
- package/dist/mcp-proxy.mjs +12 -174
- package/dist/mcp-proxy.mjs.map +1 -1
- package/dist/print-result--j99yoCV.cjs +396 -0
- package/dist/print-result-CZ2cH30Z.mjs +351 -0
- package/dist/print-result-CZ2cH30Z.mjs.map +1 -0
- package/dist/{tool-visibility-CDe-ft0L.cjs → tool-visibility-BppZZD77.cjs} +1 -1
- package/dist/{tool-visibility-P9wETx-d.mjs → tool-visibility-C5IgMQuu.mjs} +2 -2
- package/dist/{tool-visibility-P9wETx-d.mjs.map → tool-visibility-C5IgMQuu.mjs.map} +1 -1
- package/dist/{transport-error-S0za4TCe.mjs → transport-error--eFoC7tP.mjs} +2 -2
- package/dist/{transport-error-S0za4TCe.mjs.map → transport-error--eFoC7tP.mjs.map} +1 -1
- package/dist/{transport-error-CenkuT7T.cjs → transport-error-YlHlPEWJ.cjs} +1 -1
- package/dist/{update-Rn1RSqrb.cjs → update-CdMN-5BW.cjs} +1 -1
- package/dist/{update-7TewxG_2.mjs → update-DRZfepx8.mjs} +2 -2
- package/dist/{update-7TewxG_2.mjs.map → update-DRZfepx8.mjs.map} +1 -1
- package/package.json +1 -1
- package/dist/print-result-BEA_PyNz.cjs +0 -178
- package/dist/print-result-k9kXVR2c.mjs +0 -151
- package/dist/print-result-k9kXVR2c.mjs.map +0 -1
package/dist/cli.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_rolldown_runtime = require("./rolldown-runtime-C0BPl7ul.cjs");
|
|
2
|
-
const require_print_result = require("./print-result
|
|
2
|
+
const require_print_result = require("./print-result--j99yoCV.cjs");
|
|
3
3
|
let commander = require("commander");
|
|
4
4
|
let node_child_process = require("node:child_process");
|
|
5
5
|
let node_url = require("node:url");
|
|
@@ -94,7 +94,7 @@ async function withGraphMcpClient(name, fn) {
|
|
|
94
94
|
const { loadConfig } = await Promise.resolve().then(() => require("./config-BxtMoo9c.cjs")).then((n) => n.config_exports);
|
|
95
95
|
const config = await loadConfig();
|
|
96
96
|
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-Ypw9BNbn.cjs")).then((n) => n.client_exports);
|
|
97
|
-
const { toGraphMcpEndpointError } = await Promise.resolve().then(() => require("./transport-error-
|
|
97
|
+
const { toGraphMcpEndpointError } = await Promise.resolve().then(() => require("./transport-error-YlHlPEWJ.cjs"));
|
|
98
98
|
const endpoint = resolveGraphMcpEndpoint(config);
|
|
99
99
|
const paymentFetch = await createConfiguredGraphMcpFetch(config);
|
|
100
100
|
const { Client } = await import("@modelcontextprotocol/sdk/client/index.js");
|
|
@@ -219,7 +219,7 @@ program.command("status").description("Show toolkit status and configuration").a
|
|
|
219
219
|
});
|
|
220
220
|
program.command("update").description("Check npmjs for a newer Chain Insights release and update this CLI").option("--check", "Only check for a newer release").option("--dry-run", "Print the update command without running it").action(async (opts) => {
|
|
221
221
|
try {
|
|
222
|
-
const { checkForUpdate, runPackageUpdate } = await Promise.resolve().then(() => require("./update-
|
|
222
|
+
const { checkForUpdate, runPackageUpdate } = await Promise.resolve().then(() => require("./update-CdMN-5BW.cjs"));
|
|
223
223
|
const result = await checkForUpdate();
|
|
224
224
|
if (result.error) throw new Error(`Could not check npmjs for updates: ${result.error}`);
|
|
225
225
|
if (!result.updateAvailable || !result.latestVersion) {
|
|
@@ -499,7 +499,7 @@ program.command("mcp").description("Low-level access to the Chain Insights MCP e
|
|
|
499
499
|
try {
|
|
500
500
|
const { loadSchema, saveSchema } = await Promise.resolve().then(() => require("./schema-cache-DwddPLcY.cjs"));
|
|
501
501
|
const { formatToolsTable } = await Promise.resolve().then(() => require("./format-BjZuYDr8.cjs"));
|
|
502
|
-
const { visibleRemoteTools } = await Promise.resolve().then(() => require("./tool-visibility-
|
|
502
|
+
const { visibleRemoteTools } = await Promise.resolve().then(() => require("./tool-visibility-BppZZD77.cjs")).then((n) => n.tool_visibility_exports);
|
|
503
503
|
const { loadConfig } = await Promise.resolve().then(() => require("./config-BxtMoo9c.cjs")).then((n) => n.config_exports);
|
|
504
504
|
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-Ypw9BNbn.cjs")).then((n) => n.client_exports);
|
|
505
505
|
const config = await loadConfig();
|
|
@@ -529,8 +529,8 @@ program.command("mcp").description("Low-level access to the Chain Insights MCP e
|
|
|
529
529
|
})).addCommand(createCliCommand("call").description("Call a low-level MCP tool directly (advanced)").option("--json", "Print machine-readable JSON output").argument("<tool>", "Tool name to call").argument("[args...]", "Key=value arguments (e.g. address=0x1234... network=robinhood)").action(async (tool, rawArgs, opts) => {
|
|
530
530
|
try {
|
|
531
531
|
const { parseMcpCallArgs } = await Promise.resolve().then(() => require("./call-args-DhJiv6T8.cjs"));
|
|
532
|
-
const { assertPublicMcpToolName, validatePublicMcpToolArguments } = await Promise.resolve().then(() => require("./tool-visibility-
|
|
533
|
-
|
|
532
|
+
const { assertPublicMcpToolName, validatePublicMcpToolArguments } = await Promise.resolve().then(() => require("./tool-visibility-BppZZD77.cjs")).then((n) => n.tool_visibility_exports);
|
|
533
|
+
let args = parseMcpCallArgs(rawArgs);
|
|
534
534
|
assertPublicMcpToolName(tool);
|
|
535
535
|
validatePublicMcpToolArguments(tool, args);
|
|
536
536
|
if (tool === "wallet_balance") {
|
|
@@ -595,6 +595,8 @@ program.command("mcp").description("Low-level access to the Chain Insights MCP e
|
|
|
595
595
|
}
|
|
596
596
|
const { graphToolRequestOptions } = await Promise.resolve().then(() => require("./request-timeout-CYmQF8N7.cjs"));
|
|
597
597
|
const requestOptions = graphToolRequestOptions(tool);
|
|
598
|
+
const { withoutUtcProperties } = await Promise.resolve().then(() => require("./print-result--j99yoCV.cjs")).then((n) => n.timestamp_text_exports);
|
|
599
|
+
args = withoutUtcProperties(tool, args);
|
|
598
600
|
const result = requestOptions ? await client.callTool({
|
|
599
601
|
name: tool,
|
|
600
602
|
arguments: args
|
|
@@ -608,7 +610,7 @@ program.command("mcp").description("Low-level access to the Chain Insights MCP e
|
|
|
608
610
|
});
|
|
609
611
|
});
|
|
610
612
|
} catch (err) {
|
|
611
|
-
const { formatMcpCallError } = await Promise.resolve().then(() => require("./tool-visibility-
|
|
613
|
+
const { formatMcpCallError } = await Promise.resolve().then(() => require("./tool-visibility-BppZZD77.cjs")).then((n) => n.tool_visibility_exports);
|
|
612
614
|
console.error(formatMcpCallError(tool, err));
|
|
613
615
|
process.exit(1);
|
|
614
616
|
}
|
package/dist/cli.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { c as PACKAGE_VERSION, r as printMcpTextContent, s as PACKAGE_INFO } from "./print-result-CZ2cH30Z.mjs";
|
|
2
2
|
import { Command, Option } from "commander";
|
|
3
3
|
import { execFileSync } from "node:child_process";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
@@ -92,7 +92,7 @@ async function withGraphMcpClient(name, fn) {
|
|
|
92
92
|
const { loadConfig } = await import("./config-9MabJh5R.mjs").then((n) => n.t);
|
|
93
93
|
const config = await loadConfig();
|
|
94
94
|
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await import("./client-gsLi528K.mjs").then((n) => n.r);
|
|
95
|
-
const { toGraphMcpEndpointError } = await import("./transport-error
|
|
95
|
+
const { toGraphMcpEndpointError } = await import("./transport-error--eFoC7tP.mjs");
|
|
96
96
|
const endpoint = resolveGraphMcpEndpoint(config);
|
|
97
97
|
const paymentFetch = await createConfiguredGraphMcpFetch(config);
|
|
98
98
|
const { Client } = await import("@modelcontextprotocol/sdk/client/index.js");
|
|
@@ -217,7 +217,7 @@ program.command("status").description("Show toolkit status and configuration").a
|
|
|
217
217
|
});
|
|
218
218
|
program.command("update").description("Check npmjs for a newer Chain Insights release and update this CLI").option("--check", "Only check for a newer release").option("--dry-run", "Print the update command without running it").action(async (opts) => {
|
|
219
219
|
try {
|
|
220
|
-
const { checkForUpdate, runPackageUpdate } = await import("./update-
|
|
220
|
+
const { checkForUpdate, runPackageUpdate } = await import("./update-DRZfepx8.mjs");
|
|
221
221
|
const result = await checkForUpdate();
|
|
222
222
|
if (result.error) throw new Error(`Could not check npmjs for updates: ${result.error}`);
|
|
223
223
|
if (!result.updateAvailable || !result.latestVersion) {
|
|
@@ -497,7 +497,7 @@ program.command("mcp").description("Low-level access to the Chain Insights MCP e
|
|
|
497
497
|
try {
|
|
498
498
|
const { loadSchema, saveSchema } = await import("./schema-cache-BT-kHy_r.mjs");
|
|
499
499
|
const { formatToolsTable } = await import("./format-DB2IH2U5.mjs");
|
|
500
|
-
const { visibleRemoteTools } = await import("./tool-visibility-
|
|
500
|
+
const { visibleRemoteTools } = await import("./tool-visibility-C5IgMQuu.mjs").then((n) => n.a);
|
|
501
501
|
const { loadConfig } = await import("./config-9MabJh5R.mjs").then((n) => n.t);
|
|
502
502
|
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await import("./client-gsLi528K.mjs").then((n) => n.r);
|
|
503
503
|
const config = await loadConfig();
|
|
@@ -527,8 +527,8 @@ program.command("mcp").description("Low-level access to the Chain Insights MCP e
|
|
|
527
527
|
})).addCommand(createCliCommand("call").description("Call a low-level MCP tool directly (advanced)").option("--json", "Print machine-readable JSON output").argument("<tool>", "Tool name to call").argument("[args...]", "Key=value arguments (e.g. address=0x1234... network=robinhood)").action(async (tool, rawArgs, opts) => {
|
|
528
528
|
try {
|
|
529
529
|
const { parseMcpCallArgs } = await import("./call-args-Bdw2sV4n.mjs");
|
|
530
|
-
const { assertPublicMcpToolName, validatePublicMcpToolArguments } = await import("./tool-visibility-
|
|
531
|
-
|
|
530
|
+
const { assertPublicMcpToolName, validatePublicMcpToolArguments } = await import("./tool-visibility-C5IgMQuu.mjs").then((n) => n.a);
|
|
531
|
+
let args = parseMcpCallArgs(rawArgs);
|
|
532
532
|
assertPublicMcpToolName(tool);
|
|
533
533
|
validatePublicMcpToolArguments(tool, args);
|
|
534
534
|
if (tool === "wallet_balance") {
|
|
@@ -593,6 +593,8 @@ program.command("mcp").description("Low-level access to the Chain Insights MCP e
|
|
|
593
593
|
}
|
|
594
594
|
const { graphToolRequestOptions } = await import("./request-timeout-lBBe0mGf.mjs");
|
|
595
595
|
const requestOptions = graphToolRequestOptions(tool);
|
|
596
|
+
const { withoutUtcProperties } = await import("./print-result-CZ2cH30Z.mjs").then((n) => n.i);
|
|
597
|
+
args = withoutUtcProperties(tool, args);
|
|
596
598
|
const result = requestOptions ? await client.callTool({
|
|
597
599
|
name: tool,
|
|
598
600
|
arguments: args
|
|
@@ -606,7 +608,7 @@ program.command("mcp").description("Low-level access to the Chain Insights MCP e
|
|
|
606
608
|
});
|
|
607
609
|
});
|
|
608
610
|
} catch (err) {
|
|
609
|
-
const { formatMcpCallError } = await import("./tool-visibility-
|
|
611
|
+
const { formatMcpCallError } = await import("./tool-visibility-C5IgMQuu.mjs").then((n) => n.a);
|
|
610
612
|
console.error(formatMcpCallError(tool, err));
|
|
611
613
|
process.exit(1);
|
|
612
614
|
}
|
package/dist/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.mjs","names":[],"sources":["../src/investigation/workflows.ts","../src/cli.ts"],"sourcesContent":["export interface CiaWorkflow {\n name: string\n tool: string\n network: string\n description: string\n command: string\n}\n\nexport const CIA_WORKFLOWS: readonly CiaWorkflow[] = [\n {\n name: 'aml-address-risk',\n tool: 'aml_address_risk',\n network: 'robinhood',\n description: 'Screen one address for AML risk, behavior, and exchange exposure.',\n command: 'cia workflow aml-address-risk',\n },\n]\n\nconst NAME_WIDTH = 22\nconst NETWORK_WIDTH = 12\nconst COMMAND_WIDTH = 34\n\nfunction formatRow(values: string[]): string {\n return [\n values[0]?.padEnd(NAME_WIDTH),\n values[1]?.padEnd(NETWORK_WIDTH),\n values[2]?.padEnd(COMMAND_WIDTH),\n ].join(' ')\n}\n\nexport function formatCiaWorkflows(workflows: readonly CiaWorkflow[]): string {\n if (workflows.length === 0) return 'No CIA workflow tools available.'\n\n const rows = workflows.flatMap((workflow) => [\n formatRow([workflow.name, workflow.network, workflow.command]),\n ` ${workflow.description}`,\n ])\n\n return [\n 'CIA workflow tools',\n '',\n formatRow(['Workflow', 'Network', 'Run with']),\n formatRow(['-'.repeat(NAME_WIDTH), '-'.repeat(NETWORK_WIDTH), '-'.repeat(COMMAND_WIDTH)]),\n ...rows,\n ].join('\\n')\n}\n","import { Command, Option } from 'commander'\nimport { execFileSync } from 'node:child_process'\nimport { fileURLToPath } from 'node:url'\nimport path from 'node:path'\nimport { PACKAGE_INFO, PACKAGE_VERSION } from './version.js'\nimport { CIA_WORKFLOWS, formatCiaWorkflows } from './investigation/workflows.js'\nimport { printMcpTextContent } from './mcp/print-result.js'\n\n// Resolve bin/install.cjs relative to this file's location in dist/\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\nconst installerPath = path.resolve(__dirname, '..', 'bin', 'install.cjs')\n\nconst program = new Command()\n\nfunction createCliCommand(name: string): Command {\n return new Command(name).showHelpAfterError()\n}\n\nprogram\n .name('cia')\n .description('AML investigation toolkit for blockchain analysis')\n .version(PACKAGE_INFO.version)\n .showHelpAfterError()\n .option('--claude', 'Install Claude Code skills globally to ~/.claude/skills/')\n .option('--claude-desktop', 'Register the MCP proxy in Claude Desktop')\n .option('--codex', 'Install Codex skills globally to ~/.codex/skills/ and register MCP')\n .option(\n '--hermes',\n 'Install Hermes skills globally to ~/.hermes/skills/chain-insights/ and register MCP'\n )\n\n// Handle installer flags when invoked with no subcommand (bare `chain-insights --claude`)\nconst rawArgs = process.argv.slice(2)\nconst installerFlags = rawArgs.filter(\n (a) => a === '--claude' || a === '--claude-desktop' || a === '--codex' || a === '--hermes'\n)\n\n// Commander treats the root package `--version` option as global, so it would\n// consume the same flag on the AML workflow command before the child can route\n// a tool contract. Rewrite only the child-command form to a hidden alias. The\n// visible child help still documents `--version`, while root `cia --version`\n// remains the package version.\nfunction normalizeAmlToolVersionArgv(argv: string[]): string[] {\n const commandIndex = rawArgs.findIndex(\n (arg, index) => arg === 'aml-address-risk' && index === 1 && rawArgs[0] === 'workflow'\n )\n if (commandIndex === -1) return argv\n\n return argv.map((arg, index) => {\n const userArgIndex = index - 2\n if (userArgIndex <= commandIndex) return arg\n if (arg === '--version') return '--tool-version'\n if (arg.startsWith('--version=')) return `--tool-version=${arg.slice('--version='.length)}`\n return arg\n })\n}\n// A help/version request must never trigger a global install side effect — let\n// commander handle it and print help/version instead.\nconst wantsHelpOrVersion = rawArgs.some(\n (a) => a === '--help' || a === '-h' || a === '--version' || a === '-V'\n)\nif (installerFlags.length > 0 && !wantsHelpOrVersion && !rawArgs.some((a) => !a.startsWith('-'))) {\n try {\n execFileSync(process.execPath, [installerPath, ...installerFlags], { stdio: 'inherit' })\n } catch (err) {\n console.error('Installation failed:', (err as Error).message)\n process.exit(1)\n }\n process.exit(0)\n}\n\n// Legacy mcp aliases for retired graph tools are not commands; reject them\n// before Commander can mis-parse them. Members are built by concatenation so\n// retired names never appear as literal source strings.\nconst retiredMcpAliases = new Set([['trace', '-funds'].join(''), ['track', '-funds'].join('')])\nif (rawArgs[0] === 'mcp' && retiredMcpAliases.has(rawArgs[1] ?? '')) {\n console.error(`error: unknown command '${rawArgs[1]}'`)\n process.exit(1)\n}\n\nfunction runInstaller(flag: '--claude' | '--claude-desktop' | '--codex' | '--hermes'): void {\n try {\n execFileSync(process.execPath, [installerPath, flag], { stdio: 'inherit' })\n } catch (err) {\n console.error('Installation failed:', (err as Error).message)\n process.exit(1)\n }\n}\n\nasync function withGraphMcpClient<T>(\n name: string,\n fn: (\n client: import('@modelcontextprotocol/sdk/client/index.js').Client,\n config: Awaited<ReturnType<typeof import('./config/index.js').loadConfig>>\n ) => Promise<T>\n): Promise<T> {\n const { loadConfig } = await import('./config/index.js')\n const config = await loadConfig()\n const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await import('./mcp/client.js')\n // A dead or wrong endpoint (e.g. a stale `debug` config pointing at a stopped\n // local server) otherwise surfaces as a bare \"fetch failed\"; toGraphMcpEndpointError\n // names the endpoint and the cause, and passes real backend errors through.\n const { toGraphMcpEndpointError } = await import('./mcp/transport-error.js')\n const endpoint = resolveGraphMcpEndpoint(config)\n const paymentFetch = await createConfiguredGraphMcpFetch(config)\n const { Client } = await import('@modelcontextprotocol/sdk/client/index.js')\n const { StreamableHTTPClientTransport } =\n await import('@modelcontextprotocol/sdk/client/streamableHttp.js')\n const client = new Client({ name, version: PACKAGE_VERSION })\n try {\n await client.connect(\n new StreamableHTTPClientTransport(new URL(endpoint), {\n fetch: paymentFetch,\n })\n )\n } catch (err) {\n throw toGraphMcpEndpointError(err, endpoint)\n }\n // Every CLI command builds its own client, separate from the MCP proxy's\n // one, so unattended scheduled CLI runs also write to the action log.\n const { installActionLogging } = await import('./mcp/action-log.js')\n installActionLogging(client)\n try {\n return await fn(client, config)\n } catch (err) {\n throw toGraphMcpEndpointError(err, endpoint)\n } finally {\n await client.close()\n }\n}\n\nasync function printNetworkCapabilities(opts: { json?: boolean }): Promise<void> {\n const { loadConfig } = await import('./config/index.js')\n const { fetchNetworkCapabilities, formatNetworkCapabilities } =\n await import('./mcp/capabilities.js')\n const document = await fetchNetworkCapabilities(await loadConfig())\n if (opts.json) {\n console.log(JSON.stringify(document, null, 2))\n } else {\n console.log(formatNetworkCapabilities(document))\n }\n}\n\nasync function printNetworkOverview(opts: { json?: boolean }): Promise<void> {\n const { loadConfig } = await import('./config/index.js')\n const { fetchNetworkCapabilities, formatNetworkOverview } = await import('./mcp/capabilities.js')\n const document = await fetchNetworkCapabilities(await loadConfig())\n if (opts.json) {\n console.log(JSON.stringify(document, null, 2))\n } else {\n console.log(formatNetworkOverview(document))\n }\n}\n\nasync function printNetworkCapability(name: string, opts: { json?: boolean }): Promise<void> {\n const { loadConfig } = await import('./config/index.js')\n const { fetchNetworkCapabilities, findNetworkCapability, formatNetworkCapability } =\n await import('./mcp/capabilities.js')\n const document = await fetchNetworkCapabilities(await loadConfig())\n const network = findNetworkCapability(document, name)\n if (!network) {\n const available = document.networks.map((candidate) => candidate.network).join(', ')\n const suffix = available ? ` Available networks: ${available}.` : ''\n throw new Error(\n `Network \"${name}\" is not supported.${suffix} Run \\`cia networks\\` to list supported networks.`\n )\n }\n if (opts.json) {\n console.log(JSON.stringify(network, null, 2))\n } else {\n console.log(formatNetworkCapability(network))\n }\n}\n\n/**\n * The live graph schema of one network (meta_schema). A fresh cache answers with\n * no request; a build opens one session and reads through it.\n */\nasync function printNetworkSchema(\n name: string,\n opts: { json?: boolean; refresh?: boolean }\n): Promise<void> {\n const { loadConfig } = await import('./config/index.js')\n const { resolveGraphMcpEndpoint } = await import('./mcp/client.js')\n const { formatGraphSchemaText, getGraphSchema } = await import('./mcp/graph-schema.js')\n const config = await loadConfig()\n const schema = await getGraphSchema({\n network: name,\n refresh: opts.refresh === true,\n endpoint: resolveGraphMcpEndpoint(config),\n withClient: (fn) => withGraphMcpClient('chain-insights-cli-schema', (client) => fn(client)),\n })\n console.log(opts.json ? JSON.stringify(schema, null, 2) : formatGraphSchemaText(schema))\n}\n\nfunction addAmlAddressRiskCommand(parent: Command, networksCommand: string): void {\n parent.addCommand(\n createCliCommand('aml-address-risk')\n .description(\n 'CIA workflow: screen an address for AML risk, exchange behavior, and optional comparison with another address'\n )\n .requiredOption('--address <address>', 'Full blockchain address to screen')\n .requiredOption(\n '--network <network>',\n `Network to query. Run \\`${networksCommand}\\` for supported networks.`\n )\n .option(\n '--compare-address <address>',\n 'Optional second address to compare against the screened address'\n )\n .option('--json', 'Print machine-readable JSON output')\n .option(\n '--version <version>',\n 'AML tool contract version. Omit to use the latest version (currently v1)'\n )\n .addOption(\n new Option('--tool-version <version>', 'Internal alias for the AML tool version').hideHelp()\n )\n .action(\n async (opts: {\n address: string\n network: string\n compareAddress?: string\n json?: boolean\n version?: string\n toolVersion?: string\n }) => {\n try {\n const { resolveAmlAddressRiskVersion } = await import('./investigation/public-tools.js')\n const requestedVersion = opts.toolVersion ?? opts.version\n resolveAmlAddressRiskVersion(requestedVersion)\n await withGraphMcpClient('chain-insights-cli-aml-address-risk', async (client) => {\n const { runAmlAddressRisk } = await import('./investigation/public-tools.js')\n const result = await runAmlAddressRisk(\n client,\n {\n address: opts.address,\n network: opts.network,\n compareAddress: opts.compareAddress,\n },\n requestedVersion\n )\n console.log(\n opts.json ? JSON.stringify(result.structuredContent, null, 2) : result.summaryText\n )\n })\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n }\n )\n )\n}\n\nprogram\n .command('networks')\n .description('Show supported network status and dataset overview')\n .option('--json', 'Print raw capability JSON')\n .action(async (opts: { json?: boolean }) => {\n try {\n await printNetworkOverview(opts)\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n\nprogram\n .command('network')\n .description('Show details for one supported graph network')\n .argument('<name>', 'Network identifier or display name (for example: robinhood)')\n .option('--json', 'Print raw capability JSON for this network (with --schema: the schema JSON)')\n .option(\n '--schema',\n 'Show the live graph schema: labels, link types, fields and indexes (cached for 24 hours)'\n )\n .option('--refresh', 'With --schema: rebuild the schema now instead of reading the cache')\n .action(async (name: string, opts: { json?: boolean; schema?: boolean; refresh?: boolean }) => {\n try {\n if (opts.refresh && !opts.schema) {\n throw new Error('--refresh needs --schema: run `cia network <name> --schema --refresh`.')\n }\n if (opts.schema) {\n await printNetworkSchema(name, opts)\n } else {\n await printNetworkCapability(name, opts)\n }\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n\nprogram\n .command('workflows')\n .description('List CIA workflow tools')\n .option('--json', 'Print the workflow catalog as JSON')\n .action((opts: { json?: boolean }) => {\n if (opts.json) {\n console.log(JSON.stringify(CIA_WORKFLOWS, null, 2))\n return\n }\n console.log(formatCiaWorkflows(CIA_WORKFLOWS))\n })\n\nconst workflowCommand = program.command('workflow').description('Run a high-level CIA workflow')\n\naddAmlAddressRiskCommand(workflowCommand, 'cia networks')\n\nprogram\n .command('status')\n .description('Show toolkit status and configuration')\n .action(async () => {\n const { loadConfig } = await import('./config/index.js')\n const config = await loadConfig()\n const graphMcpStatus =\n config.graphMcpMode === 'debug' && config.graphMcpAuthToken?.trim()\n ? 'bearer access mode'\n : `${config.graphMcpMode} mode`\n console.log('Config: ', config.dataDir)\n console.log('Chain Insights Graph:', graphMcpStatus)\n console.log('Graph endpoint:', config.graphMcpEndpoint)\n })\n\nprogram\n .command('update')\n .description('Check npmjs for a newer Chain Insights release and update this CLI')\n .option('--check', 'Only check for a newer release')\n .option('--dry-run', 'Print the update command without running it')\n .action(async (opts: { check?: boolean; dryRun?: boolean }) => {\n try {\n const { checkForUpdate, runPackageUpdate } = await import('./update.js')\n const result = await checkForUpdate()\n if (result.error) {\n throw new Error(`Could not check npmjs for updates: ${result.error}`)\n }\n if (!result.updateAvailable || !result.latestVersion) {\n console.log(`Chain Insights is up to date (${result.currentVersion}).`)\n return\n }\n\n console.log(\n `Chain Insights ${result.latestVersion} is available (current ${result.currentVersion}).`\n )\n if (opts.check) {\n console.log(`Run: ${result.updateCommand}`)\n return\n }\n if (opts.dryRun) {\n console.log(`Would run: ${result.updateCommand}`)\n return\n }\n\n console.log(`Running: ${result.updateCommand}`)\n runPackageUpdate(result.packageName)\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n\nprogram\n .command('debug')\n .description('Configure Chain Insights Graph debug mode')\n .addCommand(\n createCliCommand('on')\n .description('Enable Chain Insights Graph debug mode without x402 payments')\n .requiredOption('--token <token>', 'Debug bearer token')\n .option('--endpoint <url>', 'Chain Insights Graph endpoint')\n .action(async (opts: { token: string; endpoint?: string }) => {\n try {\n const { saveConfig } = await import('./config/index.js')\n await saveConfig({\n graphMcpMode: 'debug',\n graphMcpAuthToken: opts.token,\n ...(opts.endpoint ? { graphMcpEndpoint: opts.endpoint } : {}),\n })\n console.log('Chain Insights Graph debug mode enabled')\n if (opts.endpoint) console.log(`Graph endpoint: ${opts.endpoint}`)\n console.log('Payments: disabled for Chain Insights Graph calls')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('off')\n .description('Disable Chain Insights Graph debug mode and use paid x402 calls')\n .action(async () => {\n try {\n const { saveConfig } = await import('./config/index.js')\n await saveConfig({ graphMcpMode: 'paid', graphMcpAuthToken: '' })\n console.log('Chain Insights Graph debug mode disabled')\n console.log('Payments: enabled for Chain Insights Graph calls')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('status')\n .description('Show Chain Insights Graph payment/debug mode')\n .action(async () => {\n try {\n const { loadConfig } = await import('./config/index.js')\n const config = await loadConfig()\n console.log(`Chain Insights Graph mode: ${config.graphMcpMode}`)\n console.log(`Graph endpoint: ${config.graphMcpEndpoint}`)\n console.log(\n `Debug token: ${config.graphMcpAuthToken?.trim() ? 'configured' : 'not configured'}`\n )\n console.log(`Payments: ${config.graphMcpMode === 'debug' ? 'disabled' : 'enabled'}`)\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n\nprogram\n .command('access-key')\n .description('Configure Chain Insights Graph test access key mode')\n .addCommand(\n createCliCommand('set')\n .description('Use a Chain Insights Graph test access key without x402 payments')\n .argument('<key>', 'Test access key')\n .option('--endpoint <url>', 'Chain Insights Graph endpoint')\n .action(async (key: string, opts: { endpoint?: string }) => {\n try {\n const normalizedKey = key.trim()\n if (!normalizedKey) throw new Error('Test access key is required')\n const { saveConfig } = await import('./config/index.js')\n await saveConfig({\n graphMcpMode: 'debug',\n graphMcpAuthToken: normalizedKey,\n ...(opts.endpoint ? { graphMcpEndpoint: opts.endpoint } : {}),\n })\n console.log('Chain Insights Graph test access key configured')\n if (opts.endpoint) console.log(`Graph endpoint: ${opts.endpoint}`)\n console.log('Payments: disabled when the server accepts this key')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('clear')\n .description('Remove the Chain Insights Graph test access key and use paid x402 calls')\n .action(async () => {\n try {\n const { saveConfig } = await import('./config/index.js')\n await saveConfig({ graphMcpMode: 'paid', graphMcpAuthToken: '' })\n console.log('Chain Insights Graph test access key cleared')\n console.log('Payments: enabled for Chain Insights Graph calls')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('status')\n .description('Show Chain Insights Graph test access key status')\n .action(async () => {\n try {\n const { loadConfig } = await import('./config/index.js')\n const config = await loadConfig()\n console.log(`Graph endpoint: ${config.graphMcpEndpoint}`)\n console.log(\n `Access key: ${config.graphMcpAuthToken?.trim() ? 'configured' : 'not configured'}`\n )\n console.log(\n `Payments: ${config.graphMcpAuthToken?.trim() ? 'disabled when accepted by server' : 'enabled'}`\n )\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n\nprogram\n .command('setup')\n .description('Configure external MCP clients')\n .addCommand(\n createCliCommand('claude-code')\n .alias('claude')\n .description('Install Claude Code skills and register the MCP proxy')\n .action(() => {\n runInstaller('--claude')\n })\n )\n .addCommand(\n createCliCommand('claude-desktop')\n .description('Register the MCP proxy in Claude Desktop, which draws the money-flow views')\n .action(() => {\n runInstaller('--claude-desktop')\n })\n )\n .addCommand(\n createCliCommand('codex')\n .description('Install Codex skills and register the MCP proxy')\n .action(() => {\n runInstaller('--codex')\n })\n )\n .addCommand(\n createCliCommand('chatgpt')\n .description('Set up the ChatGPT desktop app: its Codex chats run Chain Insights')\n .action(() => {\n runInstaller('--codex')\n // The ChatGPT chat itself runs in the cloud and cannot reach a server on\n // this computer. Only the app's Codex chats can.\n console.log(\n '\\n In the ChatGPT app, ask in a Codex chat (Codex in the sidebar), not in a ChatGPT chat.\\n'\n )\n })\n )\n .addCommand(\n createCliCommand('hermes')\n .description('Install Hermes skills and register the MCP proxy')\n .action(() => {\n runInstaller('--hermes')\n })\n )\n\nprogram\n .command('config')\n .description('Read or write configuration values')\n .addCommand(\n createCliCommand('get')\n .description('Read one Chain Insights configuration value')\n .argument('<key>', 'Config key to read')\n .action(async (key: string) => {\n const { loadConfig } = await import('./config/index.js')\n const { CONFIG_KEYS } = await import('./config/schema.js')\n if (!CONFIG_KEYS.includes(key as (typeof CONFIG_KEYS)[number])) {\n console.error(`Unknown config key: ${key}`)\n process.exit(1)\n }\n const config = await loadConfig()\n const value = (config as Record<string, unknown>)[key]\n console.log(value ?? '')\n })\n )\n .addCommand(\n createCliCommand('reset')\n .description(\n 'Put every setting back to its default (production endpoint, paid mode, no test key); the wallet stays'\n )\n .action(async () => {\n try {\n const { resetConfig, loadConfig } = await import('./config/index.js')\n const { backupPath } = await resetConfig()\n const config = await loadConfig()\n if (backupPath) console.log(`Previous settings saved to ${backupPath}`)\n console.log('Settings reset to defaults.')\n console.log(`Graph endpoint: ${config.graphMcpEndpoint}`)\n console.log(`Mode: ${config.graphMcpMode}`)\n console.log('Test access: off')\n console.log('Wallet: unchanged (~/.chain-insights/wallet.json)')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('set')\n .description('Write one Chain Insights configuration value')\n .argument('<key>', 'Config key to write')\n .argument('<value>', 'Value to set')\n .action(async (key: string, value: string) => {\n // D-01: walletPrivateKey is intercepted before saveConfig — the raw private key\n // must NEVER be written to config.json.\n if (key === 'walletPrivateKey') {\n try {\n const { setWalletPrivateKey } = await import('./wallet/index.js')\n const address = await setWalletPrivateKey(value)\n console.log('Wallet private key encrypted and stored in ~/.chain-insights/wallet.json')\n console.log(`Wallet address: ${address}`)\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n return // MUST return — walletPrivateKey must never reach saveConfig or config.json\n }\n const { loadConfig, saveConfig } = await import('./config/index.js')\n const { CONFIG_KEYS, DEFAULT_CONFIG } = await import('./config/schema.js')\n const current = await loadConfig()\n if (!CONFIG_KEYS.includes(key as (typeof CONFIG_KEYS)[number])) {\n console.error(`Unknown config key: ${key}`)\n process.exit(1)\n }\n const existing = (current as Record<string, unknown>)[key]\n const defaultValue = (DEFAULT_CONFIG as Record<string, unknown>)[key]\n const coerced =\n typeof existing === 'number' || typeof defaultValue === 'number' ? Number(value) : value\n await saveConfig({ [key]: coerced } as Parameters<typeof saveConfig>[0])\n const displayed = key.toLowerCase().includes('token') ? '[redacted]' : coerced\n console.log(`Set ${key} = ${displayed}`)\n })\n )\n\nprogram\n .command('wallet')\n .description('Manage the local Base USDC payment wallet')\n .addCommand(\n createCliCommand('create')\n .description('Generate a new local Base payment wallet')\n .action(async () => {\n try {\n const { isWalletConfigured, setWalletPrivateKey, walletPath } =\n await import('./wallet/index.js')\n const { createInterface } = await import('node:readline/promises')\n const { formatWalletBackupWarning, generateWalletPrivateKey, isWalletBackupConfirmed } =\n await import('./wallet/create.js')\n\n if (await isWalletConfigured()) {\n throw new Error(\n 'A payment wallet already exists. Run `cia wallet address` to view it or use `cia wallet import <private-key> --force` to replace it.'\n )\n }\n\n const privateKey = generateWalletPrivateKey()\n const color = process.stderr.isTTY === true && process.env['NO_COLOR'] === undefined\n process.stderr.write(`${formatWalletBackupWarning(privateKey, { color })}\\n`)\n const prompt = createInterface({ input: process.stdin, output: process.stderr })\n let answer: string\n try {\n answer = await prompt.question('> ')\n } finally {\n prompt.close()\n }\n process.stderr.write('\\n')\n if (!isWalletBackupConfirmed(answer)) {\n throw new Error('Wallet creation cancelled. The wallet was not saved.')\n }\n\n const address = await setWalletPrivateKey(privateKey)\n console.log(`Wallet created: ${address}`)\n console.log(`Encrypted local copy: ${walletPath()}`)\n console.log('Next: cia wallet ready')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('import')\n .description('Import a Base payment wallet')\n .argument('<private-key>', '0x-prefixed EVM private key')\n .option(\n '--force',\n 'Replace an existing wallet (the previous key is backed up next to wallet.json)'\n )\n .action(async (privateKey: string, opts: { force?: boolean }) => {\n try {\n const { setWalletPrivateKey, isWalletConfigured } = await import('./wallet/index.js')\n const replacing = opts.force === true && (await isWalletConfigured())\n const address = await setWalletPrivateKey(privateKey, { force: opts.force })\n if (replacing) {\n console.log('Previous wallet key backed up next to ~/.chain-insights/wallet.json')\n }\n console.log(`Wallet imported: ${address}`)\n console.log(\n 'Keep your original private key backed up securely; it cannot be recovered from the encrypted local copy.'\n )\n console.log('Encrypted local copy: ~/.chain-insights/wallet.json')\n console.log('Next: cia wallet ready')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('address')\n .description('Print the local payment wallet address')\n .action(async () => {\n try {\n const { getWalletAccount } = await import('./wallet/tools.js')\n const account = await getWalletAccount()\n console.log(account.address)\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('balance')\n .description('Show the local payment wallet Base USDC balance')\n .action(async () => {\n try {\n const { getWalletBalanceText } = await import('./wallet/tools.js')\n console.log(await getWalletBalanceText())\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('ready')\n .description('Check and prepare the wallet for paid Chain Insights Graph calls')\n .option('--check-only', 'Only check readiness; do not submit the one-time payment setup')\n .addOption(new Option('--no-approve', 'Deprecated alias for --check-only').hideHelp())\n .option('--payment-usdc <amount>', 'USDC setup cap to prepare for paid calls', '1')\n .addOption(\n new Option('--approval-usdc <amount>', 'Deprecated alias for --payment-usdc').hideHelp()\n )\n .option('--json', 'Print machine-readable readiness metadata')\n .action(\n async (opts: {\n checkOnly?: boolean\n approve?: boolean\n paymentUsdc?: string\n approvalUsdc?: string\n json?: boolean\n }) => {\n try {\n const { formatWalletReadiness, parsePaymentApprovalUnits, prepareWalletForPaidCalls } =\n await import('./wallet/tools.js')\n const minimumApprovalUnits = parsePaymentApprovalUnits(\n opts.paymentUsdc ?? opts.approvalUsdc ?? '1'\n )\n const result = await prepareWalletForPaidCalls({\n minimumApprovalUnits,\n approve: opts.checkOnly ? false : opts.approve !== false,\n })\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n result,\n (_key, value) => (typeof value === 'bigint' ? value.toString() : value),\n 2\n )\n )\n return\n }\n\n console.log(formatWalletReadiness(result.readiness, result.approval))\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n }\n )\n )\n .addCommand(\n createCliCommand('topup')\n .description('Open a local browser page to top up the payment wallet')\n .option('--no-open', 'Print the top-up URL without opening a browser')\n .option('--json', 'Print machine-readable top-up metadata')\n .action(async (opts: { open?: boolean; json?: boolean }) => {\n try {\n const { buildTopupInfo, getWalletAccount } = await import('./wallet/tools.js')\n const { startTopupServer } = await import('./wallet/topup-server.js')\n const account = await getWalletAccount()\n const url = await startTopupServer(account)\n const info = buildTopupInfo(account.address, url)\n\n if (opts.json) {\n console.log(JSON.stringify(info, null, 2))\n } else {\n console.log(`Top-up URL: ${url}`)\n console.log(`Wallet: ${account.address}`)\n console.log('Network: Base')\n console.log('Token: USDC')\n console.log('Press Ctrl+C to stop the top-up server.')\n }\n\n if (opts.open !== false) {\n const open = (await import('open')).default\n await open(url)\n }\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n\nconst mcpCommand = program\n .command('mcp')\n .description('Low-level access to the Chain Insights MCP endpoint')\n .allowExcessArguments(false)\n .addCommand(\n createCliCommand('networks')\n .description('List the detailed Chain Insights capability matrix and tool support')\n .option('--json', 'Print raw capability JSON')\n .action(async (opts: { json?: boolean }) => {\n try {\n await printNetworkCapabilities(opts)\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('tools')\n .description('List the remote GraphRAG MCP tools (cached for 24 hours)')\n .option('--refresh', 'Force refresh schema cache')\n .action(async (opts: { refresh?: boolean }) => {\n try {\n const { loadSchema, saveSchema } = await import('./mcp/schema-cache.js')\n const { formatToolsTable } = await import('./mcp/format.js')\n const { visibleRemoteTools } = await import('./mcp/tool-visibility.js')\n const { loadConfig } = await import('./config/index.js')\n const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } =\n await import('./mcp/client.js')\n const config = await loadConfig()\n const graphMcpEndpoint = resolveGraphMcpEndpoint(config)\n let tools = opts.refresh ? null : await loadSchema(graphMcpEndpoint)\n if (!tools) {\n const paymentFetch = await createConfiguredGraphMcpFetch(config)\n const { Client } = await import('@modelcontextprotocol/sdk/client/index.js')\n const { StreamableHTTPClientTransport } =\n await import('@modelcontextprotocol/sdk/client/streamableHttp.js')\n const client = new Client({ name: 'chain-insights-cli', version: PACKAGE_VERSION })\n await client.connect(\n new StreamableHTTPClientTransport(new URL(graphMcpEndpoint), { fetch: paymentFetch })\n )\n try {\n const result = await client.listTools()\n tools = result.tools as Array<{ name: string; description?: string }>\n await saveSchema(tools, graphMcpEndpoint)\n } finally {\n await client.close()\n }\n }\n console.log(formatToolsTable(visibleRemoteTools(tools)))\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n\nmcpCommand.addCommand(\n createCliCommand('call')\n .description('Call a low-level MCP tool directly (advanced)')\n .option('--json', 'Print machine-readable JSON output')\n .argument('<tool>', 'Tool name to call')\n .argument('[args...]', 'Key=value arguments (e.g. address=0x1234... network=robinhood)')\n .action(async (tool: string, rawArgs: string[], opts: { json?: boolean }) => {\n try {\n const { parseMcpCallArgs } = await import('./mcp/call-args.js')\n const { assertPublicMcpToolName, validatePublicMcpToolArguments } =\n await import('./mcp/tool-visibility.js')\n const args = parseMcpCallArgs(rawArgs)\n assertPublicMcpToolName(tool)\n validatePublicMcpToolArguments(tool, args)\n\n if (tool === 'wallet_balance') {\n const { getWalletBalanceText } = await import('./wallet/tools.js')\n console.log(await getWalletBalanceText())\n return\n }\n\n if (tool === 'meta_network_capabilities') {\n await printNetworkCapabilities({ json: opts.json })\n return\n }\n\n if (tool === 'meta_schema') {\n await printNetworkSchema(String(args['network'] ?? ''), {\n json: opts.json,\n refresh: String(args['refresh'] ?? '').toLowerCase() === 'true',\n })\n return\n }\n\n if (tool === 'graph_expand') {\n throw new Error(\n 'graph_expand is used only by the Chain Insights view in Claude. Run `cia mcp call graph_query` with your own query instead.'\n )\n }\n\n if (tool === 'meta_help') {\n console.log(\n 'Graph tools: graph_query and graph_query_batch. Metadata and payment tools: meta_* and wallet_balance.'\n )\n return\n }\n\n await withGraphMcpClient('chain-insights-cli-call', async (client, config) => {\n if (tool === 'meta_usage_status') {\n try {\n const result = await client.callTool({ name: 'usage_status', arguments: {} })\n printMcpTextContent(\n result as { content?: Array<{ type: string; text?: string }>; isError?: boolean },\n { tool, json: opts.json }\n )\n } catch (err) {\n const {\n isMissingUsageStatusToolError,\n primitiveBackendUsageStatus,\n usageStatusText,\n } = await import('./mcp/usage-status.js')\n if (!isMissingUsageStatusToolError(err)) throw err\n const { resolveGraphMcpEndpoint } = await import('./mcp/client.js')\n console.log(\n usageStatusText(primitiveBackendUsageStatus(resolveGraphMcpEndpoint(config)))\n )\n }\n return\n }\n if (tool === 'meta_subscription_status') {\n try {\n const { getWalletAccount } = await import('./wallet/tools.js')\n const account = await getWalletAccount()\n const result = await client.callTool({\n name: 'subscription_status',\n arguments: { wallet: account.address },\n })\n printMcpTextContent(\n result as { content?: Array<{ type: string; text?: string }>; isError?: boolean },\n { tool, json: opts.json }\n )\n } catch (err) {\n const {\n isMissingSubscriptionStatusToolError,\n unavailableSubscriptionStatus,\n subscriptionStatusText,\n } = await import('./mcp/subscription-status.js')\n if (!isMissingSubscriptionStatusToolError(err)) throw err\n const { resolveGraphMcpEndpoint } = await import('./mcp/client.js')\n console.log(\n subscriptionStatusText(\n unavailableSubscriptionStatus(\n resolveGraphMcpEndpoint(config),\n `subscription_status failed: ${(err as Error).message}`\n )\n )\n )\n }\n return\n }\n // graph_query and graph_query_batch can run past the SDK's 60 s default\n // while the server is still answering. Other tools keep that default.\n const { graphToolRequestOptions } = await import('./mcp/request-timeout.js')\n const requestOptions = graphToolRequestOptions(tool)\n const result = requestOptions\n ? await client.callTool({ name: tool, arguments: args }, undefined, requestOptions)\n : await client.callTool({ name: tool, arguments: args })\n printMcpTextContent(\n result as { content?: Array<{ type: string; text?: string }>; isError?: boolean },\n { tool, json: opts.json }\n )\n })\n } catch (err) {\n const { formatMcpCallError } = await import('./mcp/tool-visibility.js')\n console.error(formatMcpCallError(tool, err))\n process.exit(1)\n }\n })\n)\n\n// parseAsync (not parse) so a rejected async action surfaces as a clean\n// one-line error and a non-zero exit, instead of an unhandled-rejection stack\n// trace. Commands with their own try/catch still exit(1) before this fires.\nprogram.parseAsync(normalizeAmlToolVersionArgv(process.argv)).catch((err) => {\n console.error((err as Error).message)\n process.exit(1)\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.mjs","names":[],"sources":["../src/investigation/workflows.ts","../src/cli.ts"],"sourcesContent":["export interface CiaWorkflow {\n name: string\n tool: string\n network: string\n description: string\n command: string\n}\n\nexport const CIA_WORKFLOWS: readonly CiaWorkflow[] = [\n {\n name: 'aml-address-risk',\n tool: 'aml_address_risk',\n network: 'robinhood',\n description: 'Screen one address for AML risk, behavior, and exchange exposure.',\n command: 'cia workflow aml-address-risk',\n },\n]\n\nconst NAME_WIDTH = 22\nconst NETWORK_WIDTH = 12\nconst COMMAND_WIDTH = 34\n\nfunction formatRow(values: string[]): string {\n return [\n values[0]?.padEnd(NAME_WIDTH),\n values[1]?.padEnd(NETWORK_WIDTH),\n values[2]?.padEnd(COMMAND_WIDTH),\n ].join(' ')\n}\n\nexport function formatCiaWorkflows(workflows: readonly CiaWorkflow[]): string {\n if (workflows.length === 0) return 'No CIA workflow tools available.'\n\n const rows = workflows.flatMap((workflow) => [\n formatRow([workflow.name, workflow.network, workflow.command]),\n ` ${workflow.description}`,\n ])\n\n return [\n 'CIA workflow tools',\n '',\n formatRow(['Workflow', 'Network', 'Run with']),\n formatRow(['-'.repeat(NAME_WIDTH), '-'.repeat(NETWORK_WIDTH), '-'.repeat(COMMAND_WIDTH)]),\n ...rows,\n ].join('\\n')\n}\n","import { Command, Option } from 'commander'\nimport { execFileSync } from 'node:child_process'\nimport { fileURLToPath } from 'node:url'\nimport path from 'node:path'\nimport { PACKAGE_INFO, PACKAGE_VERSION } from './version.js'\nimport { CIA_WORKFLOWS, formatCiaWorkflows } from './investigation/workflows.js'\nimport { printMcpTextContent } from './mcp/print-result.js'\n\n// Resolve bin/install.cjs relative to this file's location in dist/\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\nconst installerPath = path.resolve(__dirname, '..', 'bin', 'install.cjs')\n\nconst program = new Command()\n\nfunction createCliCommand(name: string): Command {\n return new Command(name).showHelpAfterError()\n}\n\nprogram\n .name('cia')\n .description('AML investigation toolkit for blockchain analysis')\n .version(PACKAGE_INFO.version)\n .showHelpAfterError()\n .option('--claude', 'Install Claude Code skills globally to ~/.claude/skills/')\n .option('--claude-desktop', 'Register the MCP proxy in Claude Desktop')\n .option('--codex', 'Install Codex skills globally to ~/.codex/skills/ and register MCP')\n .option(\n '--hermes',\n 'Install Hermes skills globally to ~/.hermes/skills/chain-insights/ and register MCP'\n )\n\n// Handle installer flags when invoked with no subcommand (bare `chain-insights --claude`)\nconst rawArgs = process.argv.slice(2)\nconst installerFlags = rawArgs.filter(\n (a) => a === '--claude' || a === '--claude-desktop' || a === '--codex' || a === '--hermes'\n)\n\n// Commander treats the root package `--version` option as global, so it would\n// consume the same flag on the AML workflow command before the child can route\n// a tool contract. Rewrite only the child-command form to a hidden alias. The\n// visible child help still documents `--version`, while root `cia --version`\n// remains the package version.\nfunction normalizeAmlToolVersionArgv(argv: string[]): string[] {\n const commandIndex = rawArgs.findIndex(\n (arg, index) => arg === 'aml-address-risk' && index === 1 && rawArgs[0] === 'workflow'\n )\n if (commandIndex === -1) return argv\n\n return argv.map((arg, index) => {\n const userArgIndex = index - 2\n if (userArgIndex <= commandIndex) return arg\n if (arg === '--version') return '--tool-version'\n if (arg.startsWith('--version=')) return `--tool-version=${arg.slice('--version='.length)}`\n return arg\n })\n}\n// A help/version request must never trigger a global install side effect — let\n// commander handle it and print help/version instead.\nconst wantsHelpOrVersion = rawArgs.some(\n (a) => a === '--help' || a === '-h' || a === '--version' || a === '-V'\n)\nif (installerFlags.length > 0 && !wantsHelpOrVersion && !rawArgs.some((a) => !a.startsWith('-'))) {\n try {\n execFileSync(process.execPath, [installerPath, ...installerFlags], { stdio: 'inherit' })\n } catch (err) {\n console.error('Installation failed:', (err as Error).message)\n process.exit(1)\n }\n process.exit(0)\n}\n\n// Legacy mcp aliases for retired graph tools are not commands; reject them\n// before Commander can mis-parse them. Members are built by concatenation so\n// retired names never appear as literal source strings.\nconst retiredMcpAliases = new Set([['trace', '-funds'].join(''), ['track', '-funds'].join('')])\nif (rawArgs[0] === 'mcp' && retiredMcpAliases.has(rawArgs[1] ?? '')) {\n console.error(`error: unknown command '${rawArgs[1]}'`)\n process.exit(1)\n}\n\nfunction runInstaller(flag: '--claude' | '--claude-desktop' | '--codex' | '--hermes'): void {\n try {\n execFileSync(process.execPath, [installerPath, flag], { stdio: 'inherit' })\n } catch (err) {\n console.error('Installation failed:', (err as Error).message)\n process.exit(1)\n }\n}\n\nasync function withGraphMcpClient<T>(\n name: string,\n fn: (\n client: import('@modelcontextprotocol/sdk/client/index.js').Client,\n config: Awaited<ReturnType<typeof import('./config/index.js').loadConfig>>\n ) => Promise<T>\n): Promise<T> {\n const { loadConfig } = await import('./config/index.js')\n const config = await loadConfig()\n const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await import('./mcp/client.js')\n // A dead or wrong endpoint (e.g. a stale `debug` config pointing at a stopped\n // local server) otherwise surfaces as a bare \"fetch failed\"; toGraphMcpEndpointError\n // names the endpoint and the cause, and passes real backend errors through.\n const { toGraphMcpEndpointError } = await import('./mcp/transport-error.js')\n const endpoint = resolveGraphMcpEndpoint(config)\n const paymentFetch = await createConfiguredGraphMcpFetch(config)\n const { Client } = await import('@modelcontextprotocol/sdk/client/index.js')\n const { StreamableHTTPClientTransport } =\n await import('@modelcontextprotocol/sdk/client/streamableHttp.js')\n const client = new Client({ name, version: PACKAGE_VERSION })\n try {\n await client.connect(\n new StreamableHTTPClientTransport(new URL(endpoint), {\n fetch: paymentFetch,\n })\n )\n } catch (err) {\n throw toGraphMcpEndpointError(err, endpoint)\n }\n // Every CLI command builds its own client, separate from the MCP proxy's\n // one, so unattended scheduled CLI runs also write to the action log.\n const { installActionLogging } = await import('./mcp/action-log.js')\n installActionLogging(client)\n try {\n return await fn(client, config)\n } catch (err) {\n throw toGraphMcpEndpointError(err, endpoint)\n } finally {\n await client.close()\n }\n}\n\nasync function printNetworkCapabilities(opts: { json?: boolean }): Promise<void> {\n const { loadConfig } = await import('./config/index.js')\n const { fetchNetworkCapabilities, formatNetworkCapabilities } =\n await import('./mcp/capabilities.js')\n const document = await fetchNetworkCapabilities(await loadConfig())\n if (opts.json) {\n console.log(JSON.stringify(document, null, 2))\n } else {\n console.log(formatNetworkCapabilities(document))\n }\n}\n\nasync function printNetworkOverview(opts: { json?: boolean }): Promise<void> {\n const { loadConfig } = await import('./config/index.js')\n const { fetchNetworkCapabilities, formatNetworkOverview } = await import('./mcp/capabilities.js')\n const document = await fetchNetworkCapabilities(await loadConfig())\n if (opts.json) {\n console.log(JSON.stringify(document, null, 2))\n } else {\n console.log(formatNetworkOverview(document))\n }\n}\n\nasync function printNetworkCapability(name: string, opts: { json?: boolean }): Promise<void> {\n const { loadConfig } = await import('./config/index.js')\n const { fetchNetworkCapabilities, findNetworkCapability, formatNetworkCapability } =\n await import('./mcp/capabilities.js')\n const document = await fetchNetworkCapabilities(await loadConfig())\n const network = findNetworkCapability(document, name)\n if (!network) {\n const available = document.networks.map((candidate) => candidate.network).join(', ')\n const suffix = available ? ` Available networks: ${available}.` : ''\n throw new Error(\n `Network \"${name}\" is not supported.${suffix} Run \\`cia networks\\` to list supported networks.`\n )\n }\n if (opts.json) {\n console.log(JSON.stringify(network, null, 2))\n } else {\n console.log(formatNetworkCapability(network))\n }\n}\n\n/**\n * The live graph schema of one network (meta_schema). A fresh cache answers with\n * no request; a build opens one session and reads through it.\n */\nasync function printNetworkSchema(\n name: string,\n opts: { json?: boolean; refresh?: boolean }\n): Promise<void> {\n const { loadConfig } = await import('./config/index.js')\n const { resolveGraphMcpEndpoint } = await import('./mcp/client.js')\n const { formatGraphSchemaText, getGraphSchema } = await import('./mcp/graph-schema.js')\n const config = await loadConfig()\n const schema = await getGraphSchema({\n network: name,\n refresh: opts.refresh === true,\n endpoint: resolveGraphMcpEndpoint(config),\n withClient: (fn) => withGraphMcpClient('chain-insights-cli-schema', (client) => fn(client)),\n })\n console.log(opts.json ? JSON.stringify(schema, null, 2) : formatGraphSchemaText(schema))\n}\n\nfunction addAmlAddressRiskCommand(parent: Command, networksCommand: string): void {\n parent.addCommand(\n createCliCommand('aml-address-risk')\n .description(\n 'CIA workflow: screen an address for AML risk, exchange behavior, and optional comparison with another address'\n )\n .requiredOption('--address <address>', 'Full blockchain address to screen')\n .requiredOption(\n '--network <network>',\n `Network to query. Run \\`${networksCommand}\\` for supported networks.`\n )\n .option(\n '--compare-address <address>',\n 'Optional second address to compare against the screened address'\n )\n .option('--json', 'Print machine-readable JSON output')\n .option(\n '--version <version>',\n 'AML tool contract version. Omit to use the latest version (currently v1)'\n )\n .addOption(\n new Option('--tool-version <version>', 'Internal alias for the AML tool version').hideHelp()\n )\n .action(\n async (opts: {\n address: string\n network: string\n compareAddress?: string\n json?: boolean\n version?: string\n toolVersion?: string\n }) => {\n try {\n const { resolveAmlAddressRiskVersion } = await import('./investigation/public-tools.js')\n const requestedVersion = opts.toolVersion ?? opts.version\n resolveAmlAddressRiskVersion(requestedVersion)\n await withGraphMcpClient('chain-insights-cli-aml-address-risk', async (client) => {\n const { runAmlAddressRisk } = await import('./investigation/public-tools.js')\n const result = await runAmlAddressRisk(\n client,\n {\n address: opts.address,\n network: opts.network,\n compareAddress: opts.compareAddress,\n },\n requestedVersion\n )\n console.log(\n opts.json ? JSON.stringify(result.structuredContent, null, 2) : result.summaryText\n )\n })\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n }\n )\n )\n}\n\nprogram\n .command('networks')\n .description('Show supported network status and dataset overview')\n .option('--json', 'Print raw capability JSON')\n .action(async (opts: { json?: boolean }) => {\n try {\n await printNetworkOverview(opts)\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n\nprogram\n .command('network')\n .description('Show details for one supported graph network')\n .argument('<name>', 'Network identifier or display name (for example: robinhood)')\n .option('--json', 'Print raw capability JSON for this network (with --schema: the schema JSON)')\n .option(\n '--schema',\n 'Show the live graph schema: labels, link types, fields and indexes (cached for 24 hours)'\n )\n .option('--refresh', 'With --schema: rebuild the schema now instead of reading the cache')\n .action(async (name: string, opts: { json?: boolean; schema?: boolean; refresh?: boolean }) => {\n try {\n if (opts.refresh && !opts.schema) {\n throw new Error('--refresh needs --schema: run `cia network <name> --schema --refresh`.')\n }\n if (opts.schema) {\n await printNetworkSchema(name, opts)\n } else {\n await printNetworkCapability(name, opts)\n }\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n\nprogram\n .command('workflows')\n .description('List CIA workflow tools')\n .option('--json', 'Print the workflow catalog as JSON')\n .action((opts: { json?: boolean }) => {\n if (opts.json) {\n console.log(JSON.stringify(CIA_WORKFLOWS, null, 2))\n return\n }\n console.log(formatCiaWorkflows(CIA_WORKFLOWS))\n })\n\nconst workflowCommand = program.command('workflow').description('Run a high-level CIA workflow')\n\naddAmlAddressRiskCommand(workflowCommand, 'cia networks')\n\nprogram\n .command('status')\n .description('Show toolkit status and configuration')\n .action(async () => {\n const { loadConfig } = await import('./config/index.js')\n const config = await loadConfig()\n const graphMcpStatus =\n config.graphMcpMode === 'debug' && config.graphMcpAuthToken?.trim()\n ? 'bearer access mode'\n : `${config.graphMcpMode} mode`\n console.log('Config: ', config.dataDir)\n console.log('Chain Insights Graph:', graphMcpStatus)\n console.log('Graph endpoint:', config.graphMcpEndpoint)\n })\n\nprogram\n .command('update')\n .description('Check npmjs for a newer Chain Insights release and update this CLI')\n .option('--check', 'Only check for a newer release')\n .option('--dry-run', 'Print the update command without running it')\n .action(async (opts: { check?: boolean; dryRun?: boolean }) => {\n try {\n const { checkForUpdate, runPackageUpdate } = await import('./update.js')\n const result = await checkForUpdate()\n if (result.error) {\n throw new Error(`Could not check npmjs for updates: ${result.error}`)\n }\n if (!result.updateAvailable || !result.latestVersion) {\n console.log(`Chain Insights is up to date (${result.currentVersion}).`)\n return\n }\n\n console.log(\n `Chain Insights ${result.latestVersion} is available (current ${result.currentVersion}).`\n )\n if (opts.check) {\n console.log(`Run: ${result.updateCommand}`)\n return\n }\n if (opts.dryRun) {\n console.log(`Would run: ${result.updateCommand}`)\n return\n }\n\n console.log(`Running: ${result.updateCommand}`)\n runPackageUpdate(result.packageName)\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n\nprogram\n .command('debug')\n .description('Configure Chain Insights Graph debug mode')\n .addCommand(\n createCliCommand('on')\n .description('Enable Chain Insights Graph debug mode without x402 payments')\n .requiredOption('--token <token>', 'Debug bearer token')\n .option('--endpoint <url>', 'Chain Insights Graph endpoint')\n .action(async (opts: { token: string; endpoint?: string }) => {\n try {\n const { saveConfig } = await import('./config/index.js')\n await saveConfig({\n graphMcpMode: 'debug',\n graphMcpAuthToken: opts.token,\n ...(opts.endpoint ? { graphMcpEndpoint: opts.endpoint } : {}),\n })\n console.log('Chain Insights Graph debug mode enabled')\n if (opts.endpoint) console.log(`Graph endpoint: ${opts.endpoint}`)\n console.log('Payments: disabled for Chain Insights Graph calls')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('off')\n .description('Disable Chain Insights Graph debug mode and use paid x402 calls')\n .action(async () => {\n try {\n const { saveConfig } = await import('./config/index.js')\n await saveConfig({ graphMcpMode: 'paid', graphMcpAuthToken: '' })\n console.log('Chain Insights Graph debug mode disabled')\n console.log('Payments: enabled for Chain Insights Graph calls')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('status')\n .description('Show Chain Insights Graph payment/debug mode')\n .action(async () => {\n try {\n const { loadConfig } = await import('./config/index.js')\n const config = await loadConfig()\n console.log(`Chain Insights Graph mode: ${config.graphMcpMode}`)\n console.log(`Graph endpoint: ${config.graphMcpEndpoint}`)\n console.log(\n `Debug token: ${config.graphMcpAuthToken?.trim() ? 'configured' : 'not configured'}`\n )\n console.log(`Payments: ${config.graphMcpMode === 'debug' ? 'disabled' : 'enabled'}`)\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n\nprogram\n .command('access-key')\n .description('Configure Chain Insights Graph test access key mode')\n .addCommand(\n createCliCommand('set')\n .description('Use a Chain Insights Graph test access key without x402 payments')\n .argument('<key>', 'Test access key')\n .option('--endpoint <url>', 'Chain Insights Graph endpoint')\n .action(async (key: string, opts: { endpoint?: string }) => {\n try {\n const normalizedKey = key.trim()\n if (!normalizedKey) throw new Error('Test access key is required')\n const { saveConfig } = await import('./config/index.js')\n await saveConfig({\n graphMcpMode: 'debug',\n graphMcpAuthToken: normalizedKey,\n ...(opts.endpoint ? { graphMcpEndpoint: opts.endpoint } : {}),\n })\n console.log('Chain Insights Graph test access key configured')\n if (opts.endpoint) console.log(`Graph endpoint: ${opts.endpoint}`)\n console.log('Payments: disabled when the server accepts this key')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('clear')\n .description('Remove the Chain Insights Graph test access key and use paid x402 calls')\n .action(async () => {\n try {\n const { saveConfig } = await import('./config/index.js')\n await saveConfig({ graphMcpMode: 'paid', graphMcpAuthToken: '' })\n console.log('Chain Insights Graph test access key cleared')\n console.log('Payments: enabled for Chain Insights Graph calls')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('status')\n .description('Show Chain Insights Graph test access key status')\n .action(async () => {\n try {\n const { loadConfig } = await import('./config/index.js')\n const config = await loadConfig()\n console.log(`Graph endpoint: ${config.graphMcpEndpoint}`)\n console.log(\n `Access key: ${config.graphMcpAuthToken?.trim() ? 'configured' : 'not configured'}`\n )\n console.log(\n `Payments: ${config.graphMcpAuthToken?.trim() ? 'disabled when accepted by server' : 'enabled'}`\n )\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n\nprogram\n .command('setup')\n .description('Configure external MCP clients')\n .addCommand(\n createCliCommand('claude-code')\n .alias('claude')\n .description('Install Claude Code skills and register the MCP proxy')\n .action(() => {\n runInstaller('--claude')\n })\n )\n .addCommand(\n createCliCommand('claude-desktop')\n .description('Register the MCP proxy in Claude Desktop, which draws the money-flow views')\n .action(() => {\n runInstaller('--claude-desktop')\n })\n )\n .addCommand(\n createCliCommand('codex')\n .description('Install Codex skills and register the MCP proxy')\n .action(() => {\n runInstaller('--codex')\n })\n )\n .addCommand(\n createCliCommand('chatgpt')\n .description('Set up the ChatGPT desktop app: its Codex chats run Chain Insights')\n .action(() => {\n runInstaller('--codex')\n // The ChatGPT chat itself runs in the cloud and cannot reach a server on\n // this computer. Only the app's Codex chats can.\n console.log(\n '\\n In the ChatGPT app, ask in a Codex chat (Codex in the sidebar), not in a ChatGPT chat.\\n'\n )\n })\n )\n .addCommand(\n createCliCommand('hermes')\n .description('Install Hermes skills and register the MCP proxy')\n .action(() => {\n runInstaller('--hermes')\n })\n )\n\nprogram\n .command('config')\n .description('Read or write configuration values')\n .addCommand(\n createCliCommand('get')\n .description('Read one Chain Insights configuration value')\n .argument('<key>', 'Config key to read')\n .action(async (key: string) => {\n const { loadConfig } = await import('./config/index.js')\n const { CONFIG_KEYS } = await import('./config/schema.js')\n if (!CONFIG_KEYS.includes(key as (typeof CONFIG_KEYS)[number])) {\n console.error(`Unknown config key: ${key}`)\n process.exit(1)\n }\n const config = await loadConfig()\n const value = (config as Record<string, unknown>)[key]\n console.log(value ?? '')\n })\n )\n .addCommand(\n createCliCommand('reset')\n .description(\n 'Put every setting back to its default (production endpoint, paid mode, no test key); the wallet stays'\n )\n .action(async () => {\n try {\n const { resetConfig, loadConfig } = await import('./config/index.js')\n const { backupPath } = await resetConfig()\n const config = await loadConfig()\n if (backupPath) console.log(`Previous settings saved to ${backupPath}`)\n console.log('Settings reset to defaults.')\n console.log(`Graph endpoint: ${config.graphMcpEndpoint}`)\n console.log(`Mode: ${config.graphMcpMode}`)\n console.log('Test access: off')\n console.log('Wallet: unchanged (~/.chain-insights/wallet.json)')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('set')\n .description('Write one Chain Insights configuration value')\n .argument('<key>', 'Config key to write')\n .argument('<value>', 'Value to set')\n .action(async (key: string, value: string) => {\n // D-01: walletPrivateKey is intercepted before saveConfig — the raw private key\n // must NEVER be written to config.json.\n if (key === 'walletPrivateKey') {\n try {\n const { setWalletPrivateKey } = await import('./wallet/index.js')\n const address = await setWalletPrivateKey(value)\n console.log('Wallet private key encrypted and stored in ~/.chain-insights/wallet.json')\n console.log(`Wallet address: ${address}`)\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n return // MUST return — walletPrivateKey must never reach saveConfig or config.json\n }\n const { loadConfig, saveConfig } = await import('./config/index.js')\n const { CONFIG_KEYS, DEFAULT_CONFIG } = await import('./config/schema.js')\n const current = await loadConfig()\n if (!CONFIG_KEYS.includes(key as (typeof CONFIG_KEYS)[number])) {\n console.error(`Unknown config key: ${key}`)\n process.exit(1)\n }\n const existing = (current as Record<string, unknown>)[key]\n const defaultValue = (DEFAULT_CONFIG as Record<string, unknown>)[key]\n const coerced =\n typeof existing === 'number' || typeof defaultValue === 'number' ? Number(value) : value\n await saveConfig({ [key]: coerced } as Parameters<typeof saveConfig>[0])\n const displayed = key.toLowerCase().includes('token') ? '[redacted]' : coerced\n console.log(`Set ${key} = ${displayed}`)\n })\n )\n\nprogram\n .command('wallet')\n .description('Manage the local Base USDC payment wallet')\n .addCommand(\n createCliCommand('create')\n .description('Generate a new local Base payment wallet')\n .action(async () => {\n try {\n const { isWalletConfigured, setWalletPrivateKey, walletPath } =\n await import('./wallet/index.js')\n const { createInterface } = await import('node:readline/promises')\n const { formatWalletBackupWarning, generateWalletPrivateKey, isWalletBackupConfirmed } =\n await import('./wallet/create.js')\n\n if (await isWalletConfigured()) {\n throw new Error(\n 'A payment wallet already exists. Run `cia wallet address` to view it or use `cia wallet import <private-key> --force` to replace it.'\n )\n }\n\n const privateKey = generateWalletPrivateKey()\n const color = process.stderr.isTTY === true && process.env['NO_COLOR'] === undefined\n process.stderr.write(`${formatWalletBackupWarning(privateKey, { color })}\\n`)\n const prompt = createInterface({ input: process.stdin, output: process.stderr })\n let answer: string\n try {\n answer = await prompt.question('> ')\n } finally {\n prompt.close()\n }\n process.stderr.write('\\n')\n if (!isWalletBackupConfirmed(answer)) {\n throw new Error('Wallet creation cancelled. The wallet was not saved.')\n }\n\n const address = await setWalletPrivateKey(privateKey)\n console.log(`Wallet created: ${address}`)\n console.log(`Encrypted local copy: ${walletPath()}`)\n console.log('Next: cia wallet ready')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('import')\n .description('Import a Base payment wallet')\n .argument('<private-key>', '0x-prefixed EVM private key')\n .option(\n '--force',\n 'Replace an existing wallet (the previous key is backed up next to wallet.json)'\n )\n .action(async (privateKey: string, opts: { force?: boolean }) => {\n try {\n const { setWalletPrivateKey, isWalletConfigured } = await import('./wallet/index.js')\n const replacing = opts.force === true && (await isWalletConfigured())\n const address = await setWalletPrivateKey(privateKey, { force: opts.force })\n if (replacing) {\n console.log('Previous wallet key backed up next to ~/.chain-insights/wallet.json')\n }\n console.log(`Wallet imported: ${address}`)\n console.log(\n 'Keep your original private key backed up securely; it cannot be recovered from the encrypted local copy.'\n )\n console.log('Encrypted local copy: ~/.chain-insights/wallet.json')\n console.log('Next: cia wallet ready')\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('address')\n .description('Print the local payment wallet address')\n .action(async () => {\n try {\n const { getWalletAccount } = await import('./wallet/tools.js')\n const account = await getWalletAccount()\n console.log(account.address)\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('balance')\n .description('Show the local payment wallet Base USDC balance')\n .action(async () => {\n try {\n const { getWalletBalanceText } = await import('./wallet/tools.js')\n console.log(await getWalletBalanceText())\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('ready')\n .description('Check and prepare the wallet for paid Chain Insights Graph calls')\n .option('--check-only', 'Only check readiness; do not submit the one-time payment setup')\n .addOption(new Option('--no-approve', 'Deprecated alias for --check-only').hideHelp())\n .option('--payment-usdc <amount>', 'USDC setup cap to prepare for paid calls', '1')\n .addOption(\n new Option('--approval-usdc <amount>', 'Deprecated alias for --payment-usdc').hideHelp()\n )\n .option('--json', 'Print machine-readable readiness metadata')\n .action(\n async (opts: {\n checkOnly?: boolean\n approve?: boolean\n paymentUsdc?: string\n approvalUsdc?: string\n json?: boolean\n }) => {\n try {\n const { formatWalletReadiness, parsePaymentApprovalUnits, prepareWalletForPaidCalls } =\n await import('./wallet/tools.js')\n const minimumApprovalUnits = parsePaymentApprovalUnits(\n opts.paymentUsdc ?? opts.approvalUsdc ?? '1'\n )\n const result = await prepareWalletForPaidCalls({\n minimumApprovalUnits,\n approve: opts.checkOnly ? false : opts.approve !== false,\n })\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n result,\n (_key, value) => (typeof value === 'bigint' ? value.toString() : value),\n 2\n )\n )\n return\n }\n\n console.log(formatWalletReadiness(result.readiness, result.approval))\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n }\n )\n )\n .addCommand(\n createCliCommand('topup')\n .description('Open a local browser page to top up the payment wallet')\n .option('--no-open', 'Print the top-up URL without opening a browser')\n .option('--json', 'Print machine-readable top-up metadata')\n .action(async (opts: { open?: boolean; json?: boolean }) => {\n try {\n const { buildTopupInfo, getWalletAccount } = await import('./wallet/tools.js')\n const { startTopupServer } = await import('./wallet/topup-server.js')\n const account = await getWalletAccount()\n const url = await startTopupServer(account)\n const info = buildTopupInfo(account.address, url)\n\n if (opts.json) {\n console.log(JSON.stringify(info, null, 2))\n } else {\n console.log(`Top-up URL: ${url}`)\n console.log(`Wallet: ${account.address}`)\n console.log('Network: Base')\n console.log('Token: USDC')\n console.log('Press Ctrl+C to stop the top-up server.')\n }\n\n if (opts.open !== false) {\n const open = (await import('open')).default\n await open(url)\n }\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n\nconst mcpCommand = program\n .command('mcp')\n .description('Low-level access to the Chain Insights MCP endpoint')\n .allowExcessArguments(false)\n .addCommand(\n createCliCommand('networks')\n .description('List the detailed Chain Insights capability matrix and tool support')\n .option('--json', 'Print raw capability JSON')\n .action(async (opts: { json?: boolean }) => {\n try {\n await printNetworkCapabilities(opts)\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n .addCommand(\n createCliCommand('tools')\n .description('List the remote GraphRAG MCP tools (cached for 24 hours)')\n .option('--refresh', 'Force refresh schema cache')\n .action(async (opts: { refresh?: boolean }) => {\n try {\n const { loadSchema, saveSchema } = await import('./mcp/schema-cache.js')\n const { formatToolsTable } = await import('./mcp/format.js')\n const { visibleRemoteTools } = await import('./mcp/tool-visibility.js')\n const { loadConfig } = await import('./config/index.js')\n const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } =\n await import('./mcp/client.js')\n const config = await loadConfig()\n const graphMcpEndpoint = resolveGraphMcpEndpoint(config)\n let tools = opts.refresh ? null : await loadSchema(graphMcpEndpoint)\n if (!tools) {\n const paymentFetch = await createConfiguredGraphMcpFetch(config)\n const { Client } = await import('@modelcontextprotocol/sdk/client/index.js')\n const { StreamableHTTPClientTransport } =\n await import('@modelcontextprotocol/sdk/client/streamableHttp.js')\n const client = new Client({ name: 'chain-insights-cli', version: PACKAGE_VERSION })\n await client.connect(\n new StreamableHTTPClientTransport(new URL(graphMcpEndpoint), { fetch: paymentFetch })\n )\n try {\n const result = await client.listTools()\n tools = result.tools as Array<{ name: string; description?: string }>\n await saveSchema(tools, graphMcpEndpoint)\n } finally {\n await client.close()\n }\n }\n console.log(formatToolsTable(visibleRemoteTools(tools)))\n } catch (err) {\n console.error((err as Error).message)\n process.exit(1)\n }\n })\n )\n\nmcpCommand.addCommand(\n createCliCommand('call')\n .description('Call a low-level MCP tool directly (advanced)')\n .option('--json', 'Print machine-readable JSON output')\n .argument('<tool>', 'Tool name to call')\n .argument('[args...]', 'Key=value arguments (e.g. address=0x1234... network=robinhood)')\n .action(async (tool: string, rawArgs: string[], opts: { json?: boolean }) => {\n try {\n const { parseMcpCallArgs } = await import('./mcp/call-args.js')\n const { assertPublicMcpToolName, validatePublicMcpToolArguments } =\n await import('./mcp/tool-visibility.js')\n let args = parseMcpCallArgs(rawArgs)\n assertPublicMcpToolName(tool)\n validatePublicMcpToolArguments(tool, args)\n\n if (tool === 'wallet_balance') {\n const { getWalletBalanceText } = await import('./wallet/tools.js')\n console.log(await getWalletBalanceText())\n return\n }\n\n if (tool === 'meta_network_capabilities') {\n await printNetworkCapabilities({ json: opts.json })\n return\n }\n\n if (tool === 'meta_schema') {\n await printNetworkSchema(String(args['network'] ?? ''), {\n json: opts.json,\n refresh: String(args['refresh'] ?? '').toLowerCase() === 'true',\n })\n return\n }\n\n if (tool === 'graph_expand') {\n throw new Error(\n 'graph_expand is used only by the Chain Insights view in Claude. Run `cia mcp call graph_query` with your own query instead.'\n )\n }\n\n if (tool === 'meta_help') {\n console.log(\n 'Graph tools: graph_query and graph_query_batch. Metadata and payment tools: meta_* and wallet_balance.'\n )\n return\n }\n\n await withGraphMcpClient('chain-insights-cli-call', async (client, config) => {\n if (tool === 'meta_usage_status') {\n try {\n const result = await client.callTool({ name: 'usage_status', arguments: {} })\n printMcpTextContent(\n result as { content?: Array<{ type: string; text?: string }>; isError?: boolean },\n { tool, json: opts.json }\n )\n } catch (err) {\n const {\n isMissingUsageStatusToolError,\n primitiveBackendUsageStatus,\n usageStatusText,\n } = await import('./mcp/usage-status.js')\n if (!isMissingUsageStatusToolError(err)) throw err\n const { resolveGraphMcpEndpoint } = await import('./mcp/client.js')\n console.log(\n usageStatusText(primitiveBackendUsageStatus(resolveGraphMcpEndpoint(config)))\n )\n }\n return\n }\n if (tool === 'meta_subscription_status') {\n try {\n const { getWalletAccount } = await import('./wallet/tools.js')\n const account = await getWalletAccount()\n const result = await client.callTool({\n name: 'subscription_status',\n arguments: { wallet: account.address },\n })\n printMcpTextContent(\n result as { content?: Array<{ type: string; text?: string }>; isError?: boolean },\n { tool, json: opts.json }\n )\n } catch (err) {\n const {\n isMissingSubscriptionStatusToolError,\n unavailableSubscriptionStatus,\n subscriptionStatusText,\n } = await import('./mcp/subscription-status.js')\n if (!isMissingSubscriptionStatusToolError(err)) throw err\n const { resolveGraphMcpEndpoint } = await import('./mcp/client.js')\n console.log(\n subscriptionStatusText(\n unavailableSubscriptionStatus(\n resolveGraphMcpEndpoint(config),\n `subscription_status failed: ${(err as Error).message}`\n )\n )\n )\n }\n return\n }\n // graph_query and graph_query_batch can run past the SDK's 60 s default\n // while the server is still answering. Other tools keep that default.\n const { graphToolRequestOptions } = await import('./mcp/request-timeout.js')\n const requestOptions = graphToolRequestOptions(tool)\n // A query that names a twin as a property (a.balance_eth, f.last_seen_timestamp_utc)\n // is rewritten to the column the server has, as the proxy does (src/mcp/timestamp-text.ts).\n const { withoutUtcProperties } = await import('./mcp/timestamp-text.js')\n args = withoutUtcProperties(tool, args)\n const result = requestOptions\n ? await client.callTool({ name: tool, arguments: args }, undefined, requestOptions)\n : await client.callTool({ name: tool, arguments: args })\n printMcpTextContent(\n result as { content?: Array<{ type: string; text?: string }>; isError?: boolean },\n { tool, json: opts.json }\n )\n })\n } catch (err) {\n const { formatMcpCallError } = await import('./mcp/tool-visibility.js')\n console.error(formatMcpCallError(tool, err))\n process.exit(1)\n }\n })\n)\n\n// parseAsync (not parse) so a rejected async action surfaces as a clean\n// one-line error and a non-zero exit, instead of an unhandled-rejection stack\n// trace. Commands with their own try/catch still exit(1) before this fires.\nprogram.parseAsync(normalizeAmlToolVersionArgv(process.argv)).catch((err) => {\n console.error((err as Error).message)\n process.exit(1)\n})\n"],"mappings":";;;;;;AAQA,MAAa,gBAAwC,CACnD;CACE,MAAM;CACN,MAAM;CACN,SAAS;CACT,aAAa;CACb,SAAS;AACX,CACF;AAEA,MAAM,aAAa;AACnB,MAAM,gBAAgB;AACtB,MAAM,gBAAgB;AAEtB,SAAS,UAAU,QAA0B;CAC3C,OAAO;EACL,OAAO,EAAE,EAAE,OAAO,UAAU;EAC5B,OAAO,EAAE,EAAE,OAAO,aAAa;EAC/B,OAAO,EAAE,EAAE,OAAO,aAAa;CACjC,CAAC,CAAC,KAAK,IAAI;AACb;AAEA,SAAgB,mBAAmB,WAA2C;CAC5E,IAAI,UAAU,WAAW,GAAG,OAAO;CAEnC,MAAM,OAAO,UAAU,SAAS,aAAa,CAC3C,UAAU;EAAC,SAAS;EAAM,SAAS;EAAS,SAAS;CAAO,CAAC,GAC7D,KAAK,SAAS,aAChB,CAAC;CAED,OAAO;EACL;EACA;EACA,UAAU;GAAC;GAAY;GAAW;EAAU,CAAC;EAC7C,UAAU;GAAC,IAAI,OAAO,UAAU;GAAG,IAAI,OAAO,aAAa;GAAG,IAAI,OAAO,aAAa;EAAC,CAAC;EACxF,GAAG;CACL,CAAC,CAAC,KAAK,IAAI;AACb;;;ACpCA,MAAM,YAAY,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAC7D,MAAM,gBAAgB,KAAK,QAAQ,WAAW,MAAM,OAAO,aAAa;AAExE,MAAM,UAAU,IAAI,QAAQ;AAE5B,SAAS,iBAAiB,MAAuB;CAC/C,OAAO,IAAI,QAAQ,IAAI,CAAC,CAAC,mBAAmB;AAC9C;AAEA,QACG,KAAK,KAAK,CAAC,CACX,YAAY,mDAAmD,CAAC,CAChE,QAAQ,aAAa,OAAO,CAAC,CAC7B,mBAAmB,CAAC,CACpB,OAAO,YAAY,0DAA0D,CAAC,CAC9E,OAAO,oBAAoB,0CAA0C,CAAC,CACtE,OAAO,WAAW,oEAAoE,CAAC,CACvF,OACC,YACA,qFACF;AAGF,MAAM,UAAU,QAAQ,KAAK,MAAM,CAAC;AACpC,MAAM,iBAAiB,QAAQ,QAC5B,MAAM,MAAM,cAAc,MAAM,sBAAsB,MAAM,aAAa,MAAM,UAClF;AAOA,SAAS,4BAA4B,MAA0B;CAC7D,MAAM,eAAe,QAAQ,WAC1B,KAAK,UAAU,QAAQ,sBAAsB,UAAU,KAAK,QAAQ,OAAO,UAC9E;CACA,IAAI,iBAAiB,IAAI,OAAO;CAEhC,OAAO,KAAK,KAAK,KAAK,UAAU;EAE9B,IADqB,QAAQ,KACT,cAAc,OAAO;EACzC,IAAI,QAAQ,aAAa,OAAO;EAChC,IAAI,IAAI,WAAW,YAAY,GAAG,OAAO,kBAAkB,IAAI,MAAM,EAAmB;EACxF,OAAO;CACT,CAAC;AACH;AAGA,MAAM,qBAAqB,QAAQ,MAChC,MAAM,MAAM,YAAY,MAAM,QAAQ,MAAM,eAAe,MAAM,IACpE;AACA,IAAI,eAAe,SAAS,KAAK,CAAC,sBAAsB,CAAC,QAAQ,MAAM,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC,GAAG;CAChG,IAAI;EACF,aAAa,QAAQ,UAAU,CAAC,eAAe,GAAG,cAAc,GAAG,EAAE,OAAO,UAAU,CAAC;CACzF,SAAS,KAAK;EACZ,QAAQ,MAAM,wBAAyB,IAAc,OAAO;EAC5D,QAAQ,KAAK,CAAC;CAChB;CACA,QAAQ,KAAK,CAAC;AAChB;AAKA,MAAM,oCAAoB,IAAI,IAAI,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,SAAS,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9F,IAAI,QAAQ,OAAO,SAAS,kBAAkB,IAAI,QAAQ,MAAM,EAAE,GAAG;CACnE,QAAQ,MAAM,2BAA2B,QAAQ,GAAG,EAAE;CACtD,QAAQ,KAAK,CAAC;AAChB;AAEA,SAAS,aAAa,MAAsE;CAC1F,IAAI;EACF,aAAa,QAAQ,UAAU,CAAC,eAAe,IAAI,GAAG,EAAE,OAAO,UAAU,CAAC;CAC5E,SAAS,KAAK;EACZ,QAAQ,MAAM,wBAAyB,IAAc,OAAO;EAC5D,QAAQ,KAAK,CAAC;CAChB;AACF;AAEA,eAAe,mBACb,MACA,IAIY;CACZ,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;CACxD,MAAM,SAAS,MAAM,WAAW;CAChC,MAAM,EAAE,+BAA+B,4BAA4B,MAAM,OAAO,wBAAkB,CAAA,MAAA,MAAA,EAAA,CAAA;CAIlG,MAAM,EAAE,4BAA4B,MAAM,OAAO;CACjD,MAAM,WAAW,wBAAwB,MAAM;CAC/C,MAAM,eAAe,MAAM,8BAA8B,MAAM;CAC/D,MAAM,EAAE,WAAW,MAAM,OAAO;CAChC,MAAM,EAAE,kCACN,MAAM,OAAO;CACf,MAAM,SAAS,IAAI,OAAO;EAAE;EAAM,SAAS;CAAgB,CAAC;CAC5D,IAAI;EACF,MAAM,OAAO,QACX,IAAI,8BAA8B,IAAI,IAAI,QAAQ,GAAG,EACnD,OAAO,aACT,CAAC,CACH;CACF,SAAS,KAAK;EACZ,MAAM,wBAAwB,KAAK,QAAQ;CAC7C;CAGA,MAAM,EAAE,yBAAyB,MAAM,OAAO,4BAAsB,CAAA,MAAA,MAAA,EAAA,CAAA;CACpE,qBAAqB,MAAM;CAC3B,IAAI;EACF,OAAO,MAAM,GAAG,QAAQ,MAAM;CAChC,SAAS,KAAK;EACZ,MAAM,wBAAwB,KAAK,QAAQ;CAC7C,UAAU;EACR,MAAM,OAAO,MAAM;CACrB;AACF;AAEA,eAAe,yBAAyB,MAAyC;CAC/E,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;CACxD,MAAM,EAAE,0BAA0B,8BAChC,MAAM,OAAO,8BAAwB,CAAA,MAAA,MAAA,EAAA,CAAA;CACvC,MAAM,WAAW,MAAM,yBAAyB,MAAM,WAAW,CAAC;CAClE,IAAI,KAAK,MACP,QAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;MAE7C,QAAQ,IAAI,0BAA0B,QAAQ,CAAC;AAEnD;AAEA,eAAe,qBAAqB,MAAyC;CAC3E,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;CACxD,MAAM,EAAE,0BAA0B,0BAA0B,MAAM,OAAO,8BAAwB,CAAA,MAAA,MAAA,EAAA,CAAA;CACjG,MAAM,WAAW,MAAM,yBAAyB,MAAM,WAAW,CAAC;CAClE,IAAI,KAAK,MACP,QAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;MAE7C,QAAQ,IAAI,sBAAsB,QAAQ,CAAC;AAE/C;AAEA,eAAe,uBAAuB,MAAc,MAAyC;CAC3F,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;CACxD,MAAM,EAAE,0BAA0B,uBAAuB,4BACvD,MAAM,OAAO,8BAAwB,CAAA,MAAA,MAAA,EAAA,CAAA;CACvC,MAAM,WAAW,MAAM,yBAAyB,MAAM,WAAW,CAAC;CAClE,MAAM,UAAU,sBAAsB,UAAU,IAAI;CACpD,IAAI,CAAC,SAAS;EACZ,MAAM,YAAY,SAAS,SAAS,KAAK,cAAc,UAAU,OAAO,CAAC,CAAC,KAAK,IAAI;EACnF,MAAM,SAAS,YAAY,wBAAwB,UAAU,KAAK;EAClE,MAAM,IAAI,MACR,YAAY,KAAK,qBAAqB,OAAO,kDAC/C;CACF;CACA,IAAI,KAAK,MACP,QAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;MAE5C,QAAQ,IAAI,wBAAwB,OAAO,CAAC;AAEhD;;;;;AAMA,eAAe,mBACb,MACA,MACe;CACf,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;CACxD,MAAM,EAAE,4BAA4B,MAAM,OAAO,wBAAkB,CAAA,MAAA,MAAA,EAAA,CAAA;CACnE,MAAM,EAAE,uBAAuB,mBAAmB,MAAM,OAAO,8BAAwB,CAAA,MAAA,MAAA,EAAA,CAAA;CACvF,MAAM,SAAS,MAAM,WAAW;CAChC,MAAM,SAAS,MAAM,eAAe;EAClC,SAAS;EACT,SAAS,KAAK,YAAY;EAC1B,UAAU,wBAAwB,MAAM;EACxC,aAAa,OAAO,mBAAmB,8BAA8B,WAAW,GAAG,MAAM,CAAC;CAC5F,CAAC;CACD,QAAQ,IAAI,KAAK,OAAO,KAAK,UAAU,QAAQ,MAAM,CAAC,IAAI,sBAAsB,MAAM,CAAC;AACzF;AAEA,SAAS,yBAAyB,QAAiB,iBAA+B;CAChF,OAAO,WACL,iBAAiB,kBAAkB,CAAC,CACjC,YACC,+GACF,CAAC,CACA,eAAe,uBAAuB,mCAAmC,CAAC,CAC1E,eACC,uBACA,2BAA2B,gBAAgB,2BAC7C,CAAC,CACA,OACC,+BACA,iEACF,CAAC,CACA,OAAO,UAAU,oCAAoC,CAAC,CACtD,OACC,uBACA,0EACF,CAAC,CACA,UACC,IAAI,OAAO,4BAA4B,yCAAyC,CAAC,CAAC,SAAS,CAC7F,CAAC,CACA,OACC,OAAO,SAOD;EACJ,IAAI;GACF,MAAM,EAAE,iCAAiC,MAAM,OAAO;GACtD,MAAM,mBAAmB,KAAK,eAAe,KAAK;GAClD,6BAA6B,gBAAgB;GAC7C,MAAM,mBAAmB,uCAAuC,OAAO,WAAW;IAChF,MAAM,EAAE,sBAAsB,MAAM,OAAO;IAC3C,MAAM,SAAS,MAAM,kBACnB,QACA;KACE,SAAS,KAAK;KACd,SAAS,KAAK;KACd,gBAAgB,KAAK;IACvB,GACA,gBACF;IACA,QAAQ,IACN,KAAK,OAAO,KAAK,UAAU,OAAO,mBAAmB,MAAM,CAAC,IAAI,OAAO,WACzE;GACF,CAAC;EACH,SAAS,KAAK;GACZ,QAAQ,MAAO,IAAc,OAAO;GACpC,QAAQ,KAAK,CAAC;EAChB;CACF,CACF,CACJ;AACF;AAEA,QACG,QAAQ,UAAU,CAAC,CACnB,YAAY,oDAAoD,CAAC,CACjE,OAAO,UAAU,2BAA2B,CAAC,CAC7C,OAAO,OAAO,SAA6B;CAC1C,IAAI;EACF,MAAM,qBAAqB,IAAI;CACjC,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC;AAEH,QACG,QAAQ,SAAS,CAAC,CAClB,YAAY,8CAA8C,CAAC,CAC3D,SAAS,UAAU,6DAA6D,CAAC,CACjF,OAAO,UAAU,6EAA6E,CAAC,CAC/F,OACC,YACA,0FACF,CAAC,CACA,OAAO,aAAa,oEAAoE,CAAC,CACzF,OAAO,OAAO,MAAc,SAAkE;CAC7F,IAAI;EACF,IAAI,KAAK,WAAW,CAAC,KAAK,QACxB,MAAM,IAAI,MAAM,wEAAwE;EAE1F,IAAI,KAAK,QACP,MAAM,mBAAmB,MAAM,IAAI;OAEnC,MAAM,uBAAuB,MAAM,IAAI;CAE3C,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC;AAEH,QACG,QAAQ,WAAW,CAAC,CACpB,YAAY,yBAAyB,CAAC,CACtC,OAAO,UAAU,oCAAoC,CAAC,CACtD,QAAQ,SAA6B;CACpC,IAAI,KAAK,MAAM;EACb,QAAQ,IAAI,KAAK,UAAU,eAAe,MAAM,CAAC,CAAC;EAClD;CACF;CACA,QAAQ,IAAI,mBAAmB,aAAa,CAAC;AAC/C,CAAC;AAIH,yBAFwB,QAAQ,QAAQ,UAAU,CAAC,CAAC,YAAY,+BAEzB,GAAG,cAAc;AAExD,QACG,QAAQ,QAAQ,CAAC,CACjB,YAAY,uCAAuC,CAAC,CACpD,OAAO,YAAY;CAClB,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;CACxD,MAAM,SAAS,MAAM,WAAW;CAChC,MAAM,iBACJ,OAAO,iBAAiB,WAAW,OAAO,mBAAmB,KAAK,IAC9D,uBACA,GAAG,OAAO,aAAa;CAC7B,QAAQ,IAAI,YAAY,OAAO,OAAO;CACtC,QAAQ,IAAI,yBAAyB,cAAc;CACnD,QAAQ,IAAI,mBAAmB,OAAO,gBAAgB;AACxD,CAAC;AAEH,QACG,QAAQ,QAAQ,CAAC,CACjB,YAAY,oEAAoE,CAAC,CACjF,OAAO,WAAW,gCAAgC,CAAC,CACnD,OAAO,aAAa,6CAA6C,CAAC,CAClE,OAAO,OAAO,SAAgD;CAC7D,IAAI;EACF,MAAM,EAAE,gBAAgB,qBAAqB,MAAM,OAAO;EAC1D,MAAM,SAAS,MAAM,eAAe;EACpC,IAAI,OAAO,OACT,MAAM,IAAI,MAAM,sCAAsC,OAAO,OAAO;EAEtE,IAAI,CAAC,OAAO,mBAAmB,CAAC,OAAO,eAAe;GACpD,QAAQ,IAAI,iCAAiC,OAAO,eAAe,GAAG;GACtE;EACF;EAEA,QAAQ,IACN,kBAAkB,OAAO,cAAc,yBAAyB,OAAO,eAAe,GACxF;EACA,IAAI,KAAK,OAAO;GACd,QAAQ,IAAI,QAAQ,OAAO,eAAe;GAC1C;EACF;EACA,IAAI,KAAK,QAAQ;GACf,QAAQ,IAAI,cAAc,OAAO,eAAe;GAChD;EACF;EAEA,QAAQ,IAAI,YAAY,OAAO,eAAe;EAC9C,iBAAiB,OAAO,WAAW;CACrC,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC;AAEH,QACG,QAAQ,OAAO,CAAC,CAChB,YAAY,2CAA2C,CAAC,CACxD,WACC,iBAAiB,IAAI,CAAC,CACnB,YAAY,8DAA8D,CAAC,CAC3E,eAAe,mBAAmB,oBAAoB,CAAC,CACvD,OAAO,oBAAoB,+BAA+B,CAAC,CAC3D,OAAO,OAAO,SAA+C;CAC5D,IAAI;EACF,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EACxD,MAAM,WAAW;GACf,cAAc;GACd,mBAAmB,KAAK;GACxB,GAAI,KAAK,WAAW,EAAE,kBAAkB,KAAK,SAAS,IAAI,CAAC;EAC7D,CAAC;EACD,QAAQ,IAAI,yCAAyC;EACrD,IAAI,KAAK,UAAU,QAAQ,IAAI,mBAAmB,KAAK,UAAU;EACjE,QAAQ,IAAI,mDAAmD;CACjE,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,KAAK,CAAC,CACpB,YAAY,iEAAiE,CAAC,CAC9E,OAAO,YAAY;CAClB,IAAI;EACF,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EACxD,MAAM,WAAW;GAAE,cAAc;GAAQ,mBAAmB;EAAG,CAAC;EAChE,QAAQ,IAAI,0CAA0C;EACtD,QAAQ,IAAI,kDAAkD;CAChE,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,QAAQ,CAAC,CACvB,YAAY,8CAA8C,CAAC,CAC3D,OAAO,YAAY;CAClB,IAAI;EACF,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EACxD,MAAM,SAAS,MAAM,WAAW;EAChC,QAAQ,IAAI,8BAA8B,OAAO,cAAc;EAC/D,QAAQ,IAAI,mBAAmB,OAAO,kBAAkB;EACxD,QAAQ,IACN,mBAAmB,OAAO,mBAAmB,KAAK,IAAI,eAAe,kBACvE;EACA,QAAQ,IAAI,mBAAmB,OAAO,iBAAiB,UAAU,aAAa,WAAW;CAC3F,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL;AAEF,QACG,QAAQ,YAAY,CAAC,CACrB,YAAY,qDAAqD,CAAC,CAClE,WACC,iBAAiB,KAAK,CAAC,CACpB,YAAY,kEAAkE,CAAC,CAC/E,SAAS,SAAS,iBAAiB,CAAC,CACpC,OAAO,oBAAoB,+BAA+B,CAAC,CAC3D,OAAO,OAAO,KAAa,SAAgC;CAC1D,IAAI;EACF,MAAM,gBAAgB,IAAI,KAAK;EAC/B,IAAI,CAAC,eAAe,MAAM,IAAI,MAAM,6BAA6B;EACjE,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EACxD,MAAM,WAAW;GACf,cAAc;GACd,mBAAmB;GACnB,GAAI,KAAK,WAAW,EAAE,kBAAkB,KAAK,SAAS,IAAI,CAAC;EAC7D,CAAC;EACD,QAAQ,IAAI,iDAAiD;EAC7D,IAAI,KAAK,UAAU,QAAQ,IAAI,mBAAmB,KAAK,UAAU;EACjE,QAAQ,IAAI,qDAAqD;CACnE,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,OAAO,CAAC,CACtB,YAAY,yEAAyE,CAAC,CACtF,OAAO,YAAY;CAClB,IAAI;EACF,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EACxD,MAAM,WAAW;GAAE,cAAc;GAAQ,mBAAmB;EAAG,CAAC;EAChE,QAAQ,IAAI,8CAA8C;EAC1D,QAAQ,IAAI,kDAAkD;CAChE,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,QAAQ,CAAC,CACvB,YAAY,kDAAkD,CAAC,CAC/D,OAAO,YAAY;CAClB,IAAI;EACF,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EACxD,MAAM,SAAS,MAAM,WAAW;EAChC,QAAQ,IAAI,mBAAmB,OAAO,kBAAkB;EACxD,QAAQ,IACN,mBAAmB,OAAO,mBAAmB,KAAK,IAAI,eAAe,kBACvE;EACA,QAAQ,IACN,mBAAmB,OAAO,mBAAmB,KAAK,IAAI,qCAAqC,WAC7F;CACF,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL;AAEF,QACG,QAAQ,OAAO,CAAC,CAChB,YAAY,gCAAgC,CAAC,CAC7C,WACC,iBAAiB,aAAa,CAAC,CAC5B,MAAM,QAAQ,CAAC,CACf,YAAY,uDAAuD,CAAC,CACpE,aAAa;CACZ,aAAa,UAAU;AACzB,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,gBAAgB,CAAC,CAC/B,YAAY,4EAA4E,CAAC,CACzF,aAAa;CACZ,aAAa,kBAAkB;AACjC,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,OAAO,CAAC,CACtB,YAAY,iDAAiD,CAAC,CAC9D,aAAa;CACZ,aAAa,SAAS;AACxB,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,SAAS,CAAC,CACxB,YAAY,oEAAoE,CAAC,CACjF,aAAa;CACZ,aAAa,SAAS;CAGtB,QAAQ,IACN,8FACF;AACF,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,QAAQ,CAAC,CACvB,YAAY,kDAAkD,CAAC,CAC/D,aAAa;CACZ,aAAa,UAAU;AACzB,CAAC,CACL;AAEF,QACG,QAAQ,QAAQ,CAAC,CACjB,YAAY,oCAAoC,CAAC,CACjD,WACC,iBAAiB,KAAK,CAAC,CACpB,YAAY,6CAA6C,CAAC,CAC1D,SAAS,SAAS,oBAAoB,CAAC,CACvC,OAAO,OAAO,QAAgB;CAC7B,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;CACxD,MAAM,EAAE,gBAAgB,MAAM,OAAO,wBAAqB,CAAA,MAAA,MAAA,EAAA,CAAA;CAC1D,IAAI,CAAC,YAAY,SAAS,GAAmC,GAAG;EAC9D,QAAQ,MAAM,uBAAuB,KAAK;EAC1C,QAAQ,KAAK,CAAC;CAChB;CAEA,MAAM,SAAS,MADM,WAAW,EAAA,CACkB;CAClD,QAAQ,IAAI,SAAS,EAAE;AACzB,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,OAAO,CAAC,CACtB,YACC,uGACF,CAAC,CACA,OAAO,YAAY;CAClB,IAAI;EACF,MAAM,EAAE,aAAa,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EACrE,MAAM,EAAE,eAAe,MAAM,YAAY;EACzC,MAAM,SAAS,MAAM,WAAW;EAChC,IAAI,YAAY,QAAQ,IAAI,8BAA8B,YAAY;EACtE,QAAQ,IAAI,6BAA6B;EACzC,QAAQ,IAAI,mBAAmB,OAAO,kBAAkB;EACxD,QAAQ,IAAI,mBAAmB,OAAO,cAAc;EACpD,QAAQ,IAAI,sBAAsB;EAClC,QAAQ,IAAI,4DAA4D;CAC1E,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,KAAK,CAAC,CACpB,YAAY,8CAA8C,CAAC,CAC3D,SAAS,SAAS,qBAAqB,CAAC,CACxC,SAAS,WAAW,cAAc,CAAC,CACnC,OAAO,OAAO,KAAa,UAAkB;CAG5C,IAAI,QAAQ,oBAAoB;EAC9B,IAAI;GACF,MAAM,EAAE,wBAAwB,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;GACjE,MAAM,UAAU,MAAM,oBAAoB,KAAK;GAC/C,QAAQ,IAAI,0EAA0E;GACtF,QAAQ,IAAI,mBAAmB,SAAS;EAC1C,SAAS,KAAK;GACZ,QAAQ,MAAO,IAAc,OAAO;GACpC,QAAQ,KAAK,CAAC;EAChB;EACA;CACF;CACA,MAAM,EAAE,YAAY,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;CACpE,MAAM,EAAE,aAAa,mBAAmB,MAAM,OAAO,wBAAqB,CAAA,MAAA,MAAA,EAAA,CAAA;CAC1E,MAAM,UAAU,MAAM,WAAW;CACjC,IAAI,CAAC,YAAY,SAAS,GAAmC,GAAG;EAC9D,QAAQ,MAAM,uBAAuB,KAAK;EAC1C,QAAQ,KAAK,CAAC;CAChB;CACA,MAAM,WAAY,QAAoC;CACtD,MAAM,eAAgB,eAA2C;CACjE,MAAM,UACJ,OAAO,aAAa,YAAY,OAAO,iBAAiB,WAAW,OAAO,KAAK,IAAI;CACrF,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAqC;CACvE,MAAM,YAAY,IAAI,YAAY,CAAC,CAAC,SAAS,OAAO,IAAI,eAAe;CACvE,QAAQ,IAAI,OAAO,IAAI,KAAK,WAAW;AACzC,CAAC,CACL;AAEF,QACG,QAAQ,QAAQ,CAAC,CACjB,YAAY,2CAA2C,CAAC,CACxD,WACC,iBAAiB,QAAQ,CAAC,CACvB,YAAY,0CAA0C,CAAC,CACvD,OAAO,YAAY;CAClB,IAAI;EACF,MAAM,EAAE,oBAAoB,qBAAqB,eAC/C,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EACnC,MAAM,EAAE,oBAAoB,MAAM,OAAO;EACzC,MAAM,EAAE,2BAA2B,0BAA0B,4BAC3D,MAAM,OAAO,wBAAqB,CAAA,MAAA,MAAA,EAAA,CAAA;EAEpC,IAAI,MAAM,mBAAmB,GAC3B,MAAM,IAAI,MACR,sIACF;EAGF,MAAM,aAAa,yBAAyB;EAC5C,MAAM,QAAQ,QAAQ,OAAO,UAAU,QAAQ,QAAQ,IAAI,gBAAgB,KAAA;EAC3E,QAAQ,OAAO,MAAM,GAAG,0BAA0B,YAAY,EAAE,MAAM,CAAC,EAAE,GAAG;EAC5E,MAAM,SAAS,gBAAgB;GAAE,OAAO,QAAQ;GAAO,QAAQ,QAAQ;EAAO,CAAC;EAC/E,IAAI;EACJ,IAAI;GACF,SAAS,MAAM,OAAO,SAAS,IAAI;EACrC,UAAU;GACR,OAAO,MAAM;EACf;EACA,QAAQ,OAAO,MAAM,IAAI;EACzB,IAAI,CAAC,wBAAwB,MAAM,GACjC,MAAM,IAAI,MAAM,sDAAsD;EAGxE,MAAM,UAAU,MAAM,oBAAoB,UAAU;EACpD,QAAQ,IAAI,mBAAmB,SAAS;EACxC,QAAQ,IAAI,yBAAyB,WAAW,GAAG;EACnD,QAAQ,IAAI,wBAAwB;CACtC,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,QAAQ,CAAC,CACvB,YAAY,8BAA8B,CAAC,CAC3C,SAAS,iBAAiB,6BAA6B,CAAC,CACxD,OACC,WACA,gFACF,CAAC,CACA,OAAO,OAAO,YAAoB,SAA8B;CAC/D,IAAI;EACF,MAAM,EAAE,qBAAqB,uBAAuB,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EACrF,MAAM,YAAY,KAAK,UAAU,QAAS,MAAM,mBAAmB;EACnE,MAAM,UAAU,MAAM,oBAAoB,YAAY,EAAE,OAAO,KAAK,MAAM,CAAC;EAC3E,IAAI,WACF,QAAQ,IAAI,qEAAqE;EAEnF,QAAQ,IAAI,oBAAoB,SAAS;EACzC,QAAQ,IACN,0GACF;EACA,QAAQ,IAAI,qDAAqD;EACjE,QAAQ,IAAI,wBAAwB;CACtC,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,SAAS,CAAC,CACxB,YAAY,wCAAwC,CAAC,CACrD,OAAO,YAAY;CAClB,IAAI;EACF,MAAM,EAAE,qBAAqB,MAAM,OAAO,uBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EAC9D,MAAM,UAAU,MAAM,iBAAiB;EACvC,QAAQ,IAAI,QAAQ,OAAO;CAC7B,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,SAAS,CAAC,CACxB,YAAY,iDAAiD,CAAC,CAC9D,OAAO,YAAY;CAClB,IAAI;EACF,MAAM,EAAE,yBAAyB,MAAM,OAAO,uBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EAClE,QAAQ,IAAI,MAAM,qBAAqB,CAAC;CAC1C,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,OAAO,CAAC,CACtB,YAAY,kEAAkE,CAAC,CAC/E,OAAO,gBAAgB,gEAAgE,CAAC,CACxF,UAAU,IAAI,OAAO,gBAAgB,mCAAmC,CAAC,CAAC,SAAS,CAAC,CAAC,CACrF,OAAO,2BAA2B,4CAA4C,GAAG,CAAC,CAClF,UACC,IAAI,OAAO,4BAA4B,qCAAqC,CAAC,CAAC,SAAS,CACzF,CAAC,CACA,OAAO,UAAU,2CAA2C,CAAC,CAC7D,OACC,OAAO,SAMD;CACJ,IAAI;EACF,MAAM,EAAE,uBAAuB,2BAA2B,8BACxD,MAAM,OAAO,uBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EAInC,MAAM,SAAS,MAAM,0BAA0B;GAC7C,sBAJ2B,0BAC3B,KAAK,eAAe,KAAK,gBAAgB,GAGtB;GACnB,SAAS,KAAK,YAAY,QAAQ,KAAK,YAAY;EACrD,CAAC;EAED,IAAI,KAAK,MAAM;GACb,QAAQ,IACN,KAAK,UACH,SACC,MAAM,UAAW,OAAO,UAAU,WAAW,MAAM,SAAS,IAAI,OACjE,CACF,CACF;GACA;EACF;EAEA,QAAQ,IAAI,sBAAsB,OAAO,WAAW,OAAO,QAAQ,CAAC;CACtE,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CACF,CACJ,CAAC,CACA,WACC,iBAAiB,OAAO,CAAC,CACtB,YAAY,wDAAwD,CAAC,CACrE,OAAO,aAAa,gDAAgD,CAAC,CACrE,OAAO,UAAU,wCAAwC,CAAC,CAC1D,OAAO,OAAO,SAA6C;CAC1D,IAAI;EACF,MAAM,EAAE,gBAAgB,qBAAqB,MAAM,OAAO,uBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EAC9E,MAAM,EAAE,qBAAqB,MAAM,OAAO,8BAA2B,CAAA,MAAA,MAAA,EAAA,CAAA;EACrE,MAAM,UAAU,MAAM,iBAAiB;EACvC,MAAM,MAAM,MAAM,iBAAiB,OAAO;EAC1C,MAAM,OAAO,eAAe,QAAQ,SAAS,GAAG;EAEhD,IAAI,KAAK,MACP,QAAQ,IAAI,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;OACpC;GACL,QAAQ,IAAI,eAAe,KAAK;GAChC,QAAQ,IAAI,eAAe,QAAQ,SAAS;GAC5C,QAAQ,IAAI,kBAAkB;GAC9B,QAAQ,IAAI,kBAAkB;GAC9B,QAAQ,IAAI,yCAAyC;EACvD;EAEA,IAAI,KAAK,SAAS,OAAO;GACvB,MAAM,QAAQ,MAAM,OAAO,QAAA,CAAS;GACpC,MAAM,KAAK,GAAG;EAChB;CACF,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL;AAEiB,QAChB,QAAQ,KAAK,CAAC,CACd,YAAY,qDAAqD,CAAC,CAClE,qBAAqB,KAAK,CAAC,CAC3B,WACC,iBAAiB,UAAU,CAAC,CACzB,YAAY,qEAAqE,CAAC,CAClF,OAAO,UAAU,2BAA2B,CAAC,CAC7C,OAAO,OAAO,SAA6B;CAC1C,IAAI;EACF,MAAM,yBAAyB,IAAI;CACrC,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL,CAAC,CACA,WACC,iBAAiB,OAAO,CAAC,CACtB,YAAY,0DAA0D,CAAC,CACvE,OAAO,aAAa,4BAA4B,CAAC,CACjD,OAAO,OAAO,SAAgC;CAC7C,IAAI;EACF,MAAM,EAAE,YAAY,eAAe,MAAM,OAAO;EAChD,MAAM,EAAE,qBAAqB,MAAM,OAAO;EAC1C,MAAM,EAAE,uBAAuB,MAAM,OAAO,iCAA2B,CAAA,MAAA,MAAA,EAAA,CAAA;EACvE,MAAM,EAAE,eAAe,MAAM,OAAO,wBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;EACxD,MAAM,EAAE,+BAA+B,4BACrC,MAAM,OAAO,wBAAkB,CAAA,MAAA,MAAA,EAAA,CAAA;EACjC,MAAM,SAAS,MAAM,WAAW;EAChC,MAAM,mBAAmB,wBAAwB,MAAM;EACvD,IAAI,QAAQ,KAAK,UAAU,OAAO,MAAM,WAAW,gBAAgB;EACnE,IAAI,CAAC,OAAO;GACV,MAAM,eAAe,MAAM,8BAA8B,MAAM;GAC/D,MAAM,EAAE,WAAW,MAAM,OAAO;GAChC,MAAM,EAAE,kCACN,MAAM,OAAO;GACf,MAAM,SAAS,IAAI,OAAO;IAAE,MAAM;IAAsB,SAAS;GAAgB,CAAC;GAClF,MAAM,OAAO,QACX,IAAI,8BAA8B,IAAI,IAAI,gBAAgB,GAAG,EAAE,OAAO,aAAa,CAAC,CACtF;GACA,IAAI;IAEF,SAAQ,MADa,OAAO,UAAU,EAAA,CACvB;IACf,MAAM,WAAW,OAAO,gBAAgB;GAC1C,UAAU;IACR,MAAM,OAAO,MAAM;GACrB;EACF;EACA,QAAQ,IAAI,iBAAiB,mBAAmB,KAAK,CAAC,CAAC;CACzD,SAAS,KAAK;EACZ,QAAQ,MAAO,IAAc,OAAO;EACpC,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CAGE,CAAC,CAAC,WACT,iBAAiB,MAAM,CAAC,CACrB,YAAY,+CAA+C,CAAC,CAC5D,OAAO,UAAU,oCAAoC,CAAC,CACtD,SAAS,UAAU,mBAAmB,CAAC,CACvC,SAAS,aAAa,gEAAgE,CAAC,CACvF,OAAO,OAAO,MAAc,SAAmB,SAA6B;CAC3E,IAAI;EACF,MAAM,EAAE,qBAAqB,MAAM,OAAO;EAC1C,MAAM,EAAE,yBAAyB,mCAC/B,MAAM,OAAO,iCAA2B,CAAA,MAAA,MAAA,EAAA,CAAA;EAC1C,IAAI,OAAO,iBAAiB,OAAO;EACnC,wBAAwB,IAAI;EAC5B,+BAA+B,MAAM,IAAI;EAEzC,IAAI,SAAS,kBAAkB;GAC7B,MAAM,EAAE,yBAAyB,MAAM,OAAO,uBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;GAClE,QAAQ,IAAI,MAAM,qBAAqB,CAAC;GACxC;EACF;EAEA,IAAI,SAAS,6BAA6B;GACxC,MAAM,yBAAyB,EAAE,MAAM,KAAK,KAAK,CAAC;GAClD;EACF;EAEA,IAAI,SAAS,eAAe;GAC1B,MAAM,mBAAmB,OAAO,KAAK,cAAc,EAAE,GAAG;IACtD,MAAM,KAAK;IACX,SAAS,OAAO,KAAK,cAAc,EAAE,CAAC,CAAC,YAAY,MAAM;GAC3D,CAAC;GACD;EACF;EAEA,IAAI,SAAS,gBACX,MAAM,IAAI,MACR,6HACF;EAGF,IAAI,SAAS,aAAa;GACxB,QAAQ,IACN,wGACF;GACA;EACF;EAEA,MAAM,mBAAmB,2BAA2B,OAAO,QAAQ,WAAW;GAC5E,IAAI,SAAS,qBAAqB;IAChC,IAAI;KACF,MAAM,SAAS,MAAM,OAAO,SAAS;MAAE,MAAM;MAAgB,WAAW,CAAC;KAAE,CAAC;KAC5E,oBACE,QACA;MAAE;MAAM,MAAM,KAAK;KAAK,CAC1B;IACF,SAAS,KAAK;KACZ,MAAM,EACJ,+BACA,6BACA,oBACE,MAAM,OAAO,8BAAwB,CAAA,MAAA,MAAA,EAAA,CAAA;KACzC,IAAI,CAAC,8BAA8B,GAAG,GAAG,MAAM;KAC/C,MAAM,EAAE,4BAA4B,MAAM,OAAO,wBAAkB,CAAA,MAAA,MAAA,EAAA,CAAA;KACnE,QAAQ,IACN,gBAAgB,4BAA4B,wBAAwB,MAAM,CAAC,CAAC,CAC9E;IACF;IACA;GACF;GACA,IAAI,SAAS,4BAA4B;IACvC,IAAI;KACF,MAAM,EAAE,qBAAqB,MAAM,OAAO,uBAAoB,CAAA,MAAA,MAAA,EAAA,CAAA;KAC9D,MAAM,UAAU,MAAM,iBAAiB;KACvC,MAAM,SAAS,MAAM,OAAO,SAAS;MACnC,MAAM;MACN,WAAW,EAAE,QAAQ,QAAQ,QAAQ;KACvC,CAAC;KACD,oBACE,QACA;MAAE;MAAM,MAAM,KAAK;KAAK,CAC1B;IACF,SAAS,KAAK;KACZ,MAAM,EACJ,sCACA,+BACA,2BACE,MAAM,OAAO,qCAA+B,CAAA,MAAA,MAAA,EAAA,CAAA;KAChD,IAAI,CAAC,qCAAqC,GAAG,GAAG,MAAM;KACtD,MAAM,EAAE,4BAA4B,MAAM,OAAO,wBAAkB,CAAA,MAAA,MAAA,EAAA,CAAA;KACnE,QAAQ,IACN,uBACE,8BACE,wBAAwB,MAAM,GAC9B,+BAAgC,IAAc,SAChD,CACF,CACF;IACF;IACA;GACF;GAGA,MAAM,EAAE,4BAA4B,MAAM,OAAO;GACjD,MAAM,iBAAiB,wBAAwB,IAAI;GAGnD,MAAM,EAAE,yBAAyB,MAAM,OAAO,8BAA0B,CAAA,MAAA,MAAA,EAAA,CAAA;GACxE,OAAO,qBAAqB,MAAM,IAAI;GACtC,MAAM,SAAS,iBACX,MAAM,OAAO,SAAS;IAAE,MAAM;IAAM,WAAW;GAAK,GAAG,KAAA,GAAW,cAAc,IAChF,MAAM,OAAO,SAAS;IAAE,MAAM;IAAM,WAAW;GAAK,CAAC;GACzD,oBACE,QACA;IAAE;IAAM,MAAM,KAAK;GAAK,CAC1B;EACF,CAAC;CACH,SAAS,KAAK;EACZ,MAAM,EAAE,uBAAuB,MAAM,OAAO,iCAA2B,CAAA,MAAA,MAAA,EAAA,CAAA;EACvE,QAAQ,MAAM,mBAAmB,MAAM,GAAG,CAAC;EAC3C,QAAQ,KAAK,CAAC;CAChB;AACF,CAAC,CACL;AAKA,QAAQ,WAAW,4BAA4B,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,QAAQ;CAC3E,QAAQ,MAAO,IAAc,OAAO;CACpC,QAAQ,KAAK,CAAC;AAChB,CAAC"}
|