chain-insights 0.23.0 → 0.24.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/README.md +20 -4
- package/bin/cli.js +1 -1
- package/bin/install.cjs +1 -1
- package/dist/{capabilities-BZI6qROg.mjs → capabilities-CY3Ok5ls.mjs} +61 -19
- package/dist/capabilities-CY3Ok5ls.mjs.map +1 -0
- package/dist/{capabilities-CPcrxodx.cjs → capabilities-CjpGnrVg.cjs} +60 -18
- package/dist/cli.cjs +78 -19
- package/dist/cli.mjs +78 -19
- package/dist/cli.mjs.map +1 -1
- package/dist/{client-D4aM4bzP.mjs → client-CHYskPnG.mjs} +6 -6
- package/dist/client-CHYskPnG.mjs.map +1 -0
- package/dist/{client-CqAzD519.cjs → client-Ypw9BNbn.cjs} +5 -5
- package/dist/create-C0buxEfU.mjs +48 -0
- package/dist/create-C0buxEfU.mjs.map +1 -0
- package/dist/create-DdggkF04.cjs +69 -0
- package/dist/format-BjZuYDr8.cjs +50 -0
- package/dist/format-DB2IH2U5.mjs +52 -0
- package/dist/format-DB2IH2U5.mjs.map +1 -0
- package/dist/index.cjs +7 -3
- package/dist/index.d.cts +10 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +10 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +5 -4
- package/dist/mcp-proxy.cjs +5 -5
- package/dist/mcp-proxy.mjs +5 -5
- package/dist/mcp-proxy.mjs.map +1 -1
- package/dist/{tools-lPY6k-vJ.cjs → tools-BHfphgy9.cjs} +4 -4
- package/dist/{tools-BKLnlBG1.mjs → tools-BRQAPF2R.mjs} +5 -5
- package/dist/tools-BRQAPF2R.mjs.map +1 -0
- package/dist/{wallet-BEvHrHi3.cjs → wallet-B3hAr70M.cjs} +3 -3
- package/dist/{wallet-fMbhvKXT.mjs → wallet-COcm4oIb.mjs} +4 -4
- package/dist/wallet-COcm4oIb.mjs.map +1 -0
- package/docs/architecture.md +5 -5
- package/docs/graph-tools.md +7 -3
- package/docs/mcp-proxy.md +34 -20
- package/package.json +1 -1
- package/dist/capabilities-BZI6qROg.mjs.map +0 -1
- package/dist/client-D4aM4bzP.mjs.map +0 -1
- package/dist/format-9NLBykEL.cjs +0 -20
- package/dist/format-Bq94jSyw.mjs +0 -22
- package/dist/format-Bq94jSyw.mjs.map +0 -1
- package/dist/tools-BKLnlBG1.mjs.map +0 -1
- package/dist/wallet-fMbhvKXT.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -23,10 +23,11 @@ as-is on macOS; on Windows use WSL.
|
|
|
23
23
|
npx chain-insights@latest --help # run without installing
|
|
24
24
|
npm install -g chain-insights # or install the cia CLI globally
|
|
25
25
|
cia mcp call aml_address_risk network=robinhood address=0xYourAddressHere
|
|
26
|
-
cia networks #
|
|
26
|
+
cia networks # network status + dataset overview
|
|
27
|
+
cia network robinhood # details for one network
|
|
27
28
|
```
|
|
28
29
|
|
|
29
|
-
Sixty seconds gets you the CLI and the
|
|
30
|
+
Sixty seconds gets you the CLI, a network overview, and the remote tool catalog.
|
|
30
31
|
To call the same tools from an agent, register the MCP proxy:
|
|
31
32
|
`cia setup claude-code` (or `codex` / `hermes`).
|
|
32
33
|
|
|
@@ -214,6 +215,18 @@ cia mcp call aml_address_risk \
|
|
|
214
215
|
network=robinhood address=0xYourAddressHere
|
|
215
216
|
```
|
|
216
217
|
|
|
218
|
+
Create a local payment wallet when paid access is needed:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
cia wallet create
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
The command shows the private key once in a clearly marked warning panel.
|
|
225
|
+
Save it in a secure password manager or offline backup, then type `BACKED UP`
|
|
226
|
+
to finish. The encrypted local copy is stored at
|
|
227
|
+
`~/.chain-insights/wallet.json`. Continue with `cia wallet ready` when you are
|
|
228
|
+
ready to enable paid access.
|
|
229
|
+
|
|
217
230
|
Example queries. Direct topology:
|
|
218
231
|
|
|
219
232
|
```bash
|
|
@@ -314,13 +327,16 @@ Health checks (each is runnable):
|
|
|
314
327
|
# Configured endpoint
|
|
315
328
|
cia config get graphMcpEndpoint
|
|
316
329
|
|
|
317
|
-
#
|
|
330
|
+
# User-facing network overview
|
|
331
|
+
cia networks
|
|
332
|
+
|
|
333
|
+
# Detailed Chain Insights capability matrix
|
|
318
334
|
cia mcp networks
|
|
319
335
|
|
|
320
336
|
# Caller allowance / metering status
|
|
321
337
|
cia mcp call meta_usage_status
|
|
322
338
|
|
|
323
|
-
# Fresh tool discovery
|
|
339
|
+
# Fresh remote tool discovery
|
|
324
340
|
cia mcp tools --refresh
|
|
325
341
|
|
|
326
342
|
# Installed CLI sanity
|
package/bin/cli.js
CHANGED
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
// CJS shim: bridges the npm bin entry to the ESM dist built by tsdown.
|
|
5
5
|
// Dynamic import() is the correct bridge pattern from CommonJS to ESM.
|
|
6
6
|
import('../dist/cli.mjs').catch((err) => {
|
|
7
|
-
console.error('Failed to load
|
|
7
|
+
console.error('Failed to load cia:', err.message)
|
|
8
8
|
process.exit(1)
|
|
9
9
|
})
|
package/bin/install.cjs
CHANGED
|
@@ -282,5 +282,5 @@ for (const target of skillsTargets) {
|
|
|
282
282
|
console.log(` ${cyan}Config:${reset} ${configPath}`)
|
|
283
283
|
console.log(` ${cyan}Data dir:${reset} ${dataDir}`)
|
|
284
284
|
console.log(
|
|
285
|
-
`\n${dim}Run ${reset}${cyan}
|
|
285
|
+
`\n${dim}Run ${reset}${cyan}cia status${reset}${dim} to verify the installation.${reset}\n`
|
|
286
286
|
)
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
|
-
import { a as resolveGraphMcpEndpoint, n as applyMcpAuthHeaders } from "./client-
|
|
2
|
+
import { a as resolveGraphMcpEndpoint, n as applyMcpAuthHeaders } from "./client-CHYskPnG.mjs";
|
|
3
3
|
//#region src/mcp/capabilities.ts
|
|
4
4
|
var capabilities_exports = /* @__PURE__ */ __exportAll({
|
|
5
5
|
PUBLIC_CHAIN_INSIGHTS_TOOL_STATUS: () => PUBLIC_CHAIN_INSIGHTS_TOOL_STATUS,
|
|
6
6
|
fetchNetworkCapabilities: () => fetchNetworkCapabilities,
|
|
7
|
+
findNetworkCapability: () => findNetworkCapability,
|
|
7
8
|
formatNetworkCapabilities: () => formatNetworkCapabilities,
|
|
9
|
+
formatNetworkCapability: () => formatNetworkCapability,
|
|
10
|
+
formatNetworkOverview: () => formatNetworkOverview,
|
|
8
11
|
mirrorGraphNetworkCapabilities: () => mirrorGraphNetworkCapabilities
|
|
9
12
|
});
|
|
10
13
|
const PUBLIC_CHAIN_INSIGHTS_TOOL_STATUS = {
|
|
@@ -97,33 +100,72 @@ function datasetLabel(network) {
|
|
|
97
100
|
if (dateRange === "") return blockRange;
|
|
98
101
|
return `${blockRange} / ${dateRange}`;
|
|
99
102
|
}
|
|
103
|
+
function displayName(network) {
|
|
104
|
+
return network.display_name || network.network;
|
|
105
|
+
}
|
|
106
|
+
function statusLabel(network) {
|
|
107
|
+
return network.default ? `${network.status} (default)` : network.status;
|
|
108
|
+
}
|
|
109
|
+
function formatTable(headers, rows, minimumWidths) {
|
|
110
|
+
const widths = headers.map((header, index) => Math.max(minimumWidths[index] ?? 0, header.length, ...rows.map((row) => row[index]?.length ?? 0)));
|
|
111
|
+
const row = (values) => values.map((value, index) => value.padEnd(widths[index])).join(" ");
|
|
112
|
+
return [
|
|
113
|
+
row(headers),
|
|
114
|
+
widths.map((width) => "-".repeat(width)).join(" "),
|
|
115
|
+
...rows.map(row)
|
|
116
|
+
].join("\n");
|
|
117
|
+
}
|
|
118
|
+
function formatNetworkOverview(document) {
|
|
119
|
+
if (document.networks.length === 0) return "No supported networks advertised.";
|
|
120
|
+
return formatTable([
|
|
121
|
+
"Network",
|
|
122
|
+
"Status",
|
|
123
|
+
"Dataset"
|
|
124
|
+
], document.networks.map((network) => [
|
|
125
|
+
displayName(network),
|
|
126
|
+
statusLabel(network),
|
|
127
|
+
datasetLabel(network)
|
|
128
|
+
]), [
|
|
129
|
+
14,
|
|
130
|
+
10,
|
|
131
|
+
38
|
|
132
|
+
]);
|
|
133
|
+
}
|
|
100
134
|
function formatNetworkCapabilities(document) {
|
|
101
135
|
if (document.networks.length === 0) return "No supported networks advertised.";
|
|
102
|
-
|
|
136
|
+
return formatTable([
|
|
103
137
|
"Network",
|
|
104
138
|
"Dataset",
|
|
105
|
-
"
|
|
106
|
-
]
|
|
107
|
-
|
|
139
|
+
"Chain Insights tools"
|
|
140
|
+
], document.networks.flatMap((network) => {
|
|
141
|
+
return availableToolLines(network).map((toolLine, index) => [
|
|
142
|
+
index === 0 ? displayName(network) : "",
|
|
143
|
+
index === 0 ? datasetLabel(network) : "",
|
|
144
|
+
toolLine
|
|
145
|
+
]);
|
|
146
|
+
}), [
|
|
108
147
|
14,
|
|
109
148
|
38,
|
|
110
149
|
64
|
|
150
|
+
]);
|
|
151
|
+
}
|
|
152
|
+
function findNetworkCapability(document, name) {
|
|
153
|
+
const normalizedName = name.trim().toLowerCase();
|
|
154
|
+
if (!normalizedName) return void 0;
|
|
155
|
+
return document.networks.find((network) => [network.network, network.display_name].some((candidate) => candidate?.trim().toLowerCase() === normalizedName));
|
|
156
|
+
}
|
|
157
|
+
function formatNetworkCapability(network) {
|
|
158
|
+
const rows = [
|
|
159
|
+
["Network", network.display_name || network.network],
|
|
160
|
+
["Identifier", network.network],
|
|
161
|
+
["Status", network.default ? `${network.status} (default)` : network.status],
|
|
162
|
+
["Dataset", datasetLabel(network)],
|
|
163
|
+
["Available tools", availableTools(network).join(", ") || "none"]
|
|
111
164
|
];
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
return availableToolLines(network).map((toolLine, index) => row([
|
|
115
|
-
index === 0 ? network.display_name || network.network : "",
|
|
116
|
-
index === 0 ? datasetLabel(network) : "",
|
|
117
|
-
toolLine
|
|
118
|
-
]));
|
|
119
|
-
});
|
|
120
|
-
return [
|
|
121
|
-
row(headers),
|
|
122
|
-
widths.map((width) => "-".repeat(width)).join(" "),
|
|
123
|
-
...networkRows
|
|
124
|
-
].join("\n");
|
|
165
|
+
const labelWidth = Math.max(...rows.map(([label]) => label.length));
|
|
166
|
+
return rows.map(([label, value]) => `${label.padEnd(labelWidth)} ${value}`).join("\n");
|
|
125
167
|
}
|
|
126
168
|
//#endregion
|
|
127
169
|
export { mirrorGraphNetworkCapabilities as n, capabilities_exports as t };
|
|
128
170
|
|
|
129
|
-
//# sourceMappingURL=capabilities-
|
|
171
|
+
//# sourceMappingURL=capabilities-CY3Ok5ls.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities-CY3Ok5ls.mjs","names":[],"sources":["../src/mcp/capabilities.ts"],"sourcesContent":["import type { InvestigatorConfig } from '../config/schema.js'\nimport { applyMcpAuthHeaders, resolveGraphMcpEndpoint } from './client.js'\n\nexport interface NetworkTopologyLayer {\n enabled: boolean\n coverage?: {\n from_block?: number\n to_block?: number\n from_timestamp?: string\n to_timestamp?: string\n chain_tip_block?: number\n blocks_behind_tip?: number\n }\n}\n\nexport interface NetworkLayerCapability {\n enabled: boolean\n live?: NetworkTopologyLayer\n archive?: NetworkTopologyLayer\n}\n\nexport interface NetworkCapability {\n network: string\n display_name?: string\n status: string\n default?: boolean\n layers: Record<string, NetworkLayerCapability>\n tools: Record<string, string>\n coverage?: {\n from_block?: number\n to_block?: number\n from_timestamp?: string\n to_timestamp?: string\n chain_tip_block?: number\n blocks_behind_tip?: number\n }\n freshness?: {\n last_processed_at?: string\n last_successful_sync_at?: string\n max_data_age_seconds?: number\n last_processing_duration_seconds?: number\n }\n}\n\nexport interface NetworkCapabilitiesDocument {\n schema: 'chain-insights.network-capabilities.v1'\n networks: NetworkCapability[]\n}\n\nexport const PUBLIC_CHAIN_INSIGHTS_TOOL_STATUS = {\n aml_address_risk: 'available',\n graph_query: 'available',\n graph_query_batch: 'available',\n meta_network_capabilities: 'available',\n meta_usage_status: 'available',\n meta_help: 'available',\n wallet_balance: 'available',\n} as const\nconst AVAILABLE_TOOLS_PER_LINE = 3\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction advertisedNetwork(raw: unknown): NetworkCapability | null {\n if (!isRecord(raw) || typeof raw.network !== 'string' || raw.network.trim() === '') {\n return null\n }\n const network = raw.network.trim()\n const capability: NetworkCapability = {\n network,\n display_name:\n typeof raw.display_name === 'string' && raw.display_name.trim() !== ''\n ? raw.display_name\n : network,\n status: typeof raw.status === 'string' && raw.status.trim() !== '' ? raw.status : 'live',\n layers: {},\n tools: { ...PUBLIC_CHAIN_INSIGHTS_TOOL_STATUS },\n }\n if (raw.default === true) capability.default = true\n if (raw.default === false) capability.default = false\n if (isRecord(raw.coverage)) capability.coverage = raw.coverage as NetworkCapability['coverage']\n if (isRecord(raw.freshness))\n capability.freshness = raw.freshness as NetworkCapability['freshness']\n return capability\n}\n\n/** Repeat GraphRAG's network list. CIA does not add, drop, or invent names. */\nexport function mirrorGraphNetworkCapabilities(document: {\n networks: unknown[]\n}): NetworkCapabilitiesDocument {\n return {\n schema: 'chain-insights.network-capabilities.v1',\n networks: document.networks\n .map((network) => advertisedNetwork(network))\n .filter((network): network is NetworkCapability => network !== null),\n }\n}\n\nfunction publicNetworkCapabilities(\n document: NetworkCapabilitiesDocument\n): NetworkCapabilitiesDocument {\n return mirrorGraphNetworkCapabilities(document)\n}\n\nfunction metadataNetworksUrl(endpoint: string): URL {\n const url = new URL(endpoint)\n url.pathname = '/metadata/networks'\n url.search = ''\n url.hash = ''\n return url\n}\n\nexport async function fetchNetworkCapabilities(\n config: Pick<InvestigatorConfig, 'graphMcpAuthToken' | 'graphMcpMode' | 'graphMcpEndpoint'>\n): Promise<NetworkCapabilitiesDocument> {\n const endpoint = resolveGraphMcpEndpoint(config)\n const request = metadataNetworksUrl(endpoint)\n const headers = new Headers()\n const token = config.graphMcpAuthToken?.trim()\n if (token) {\n applyMcpAuthHeaders(headers, token)\n }\n let response: Response\n try {\n response = await fetch(request, { headers })\n } catch (err) {\n throw new Error(`network capabilities unavailable at ${request}: ${(err as Error).message}`)\n }\n if (!response.ok) {\n throw new Error(`network capabilities unavailable at ${request}: HTTP ${response.status}`)\n }\n const parsed = (await response.json()) as NetworkCapabilitiesDocument\n if (\n parsed.schema !== 'chain-insights.network-capabilities.v1' ||\n !Array.isArray(parsed.networks)\n ) {\n throw new Error('network capabilities response has unsupported schema')\n }\n return publicNetworkCapabilities(parsed)\n}\n\nfunction availableTools(network: NetworkCapability): string[] {\n const effectiveTools = {\n ...(network.tools ?? {}),\n ...PUBLIC_CHAIN_INSIGHTS_TOOL_STATUS,\n }\n const tools = Object.entries(effectiveTools)\n .filter(([, status]) => status === 'available')\n .map(([name]) => name)\n return tools.sort()\n}\n\nfunction availableToolLines(network: NetworkCapability): string[] {\n const tools = availableTools(network)\n if (tools.length === 0) return ['none']\n const lines: string[] = []\n for (let index = 0; index < tools.length; index += AVAILABLE_TOOLS_PER_LINE) {\n lines.push(tools.slice(index, index + AVAILABLE_TOOLS_PER_LINE).join(', '))\n }\n return lines\n}\n\nfunction shortDate(value?: string): string {\n if (!value) return ''\n return value.slice(0, 10)\n}\n\nfunction datasetLabel(network: NetworkCapability): string {\n const coverage = network.coverage\n if (!coverage) return 'unknown'\n const blockRange =\n coverage.from_block !== undefined && coverage.to_block !== undefined\n ? `${coverage.from_block}..${coverage.to_block}`\n : 'blocks unknown'\n const dateRange =\n coverage.from_timestamp && coverage.to_timestamp\n ? `${shortDate(coverage.from_timestamp)}..${shortDate(coverage.to_timestamp)}`\n : ''\n if (blockRange === 'blocks unknown' && dateRange === '') return 'unknown'\n if (blockRange === 'blocks unknown') return dateRange\n if (dateRange === '') return blockRange\n return `${blockRange} / ${dateRange}`\n}\n\nfunction displayName(network: NetworkCapability): string {\n return network.display_name || network.network\n}\n\nfunction statusLabel(network: NetworkCapability): string {\n return network.default ? `${network.status} (default)` : network.status\n}\n\nfunction formatTable(headers: string[], rows: string[][], minimumWidths: number[]): string {\n const widths = headers.map((header, index) =>\n Math.max(\n minimumWidths[index] ?? 0,\n header.length,\n ...rows.map((row) => row[index]?.length ?? 0)\n )\n )\n const row = (values: string[]) =>\n values.map((value, index) => value.padEnd(widths[index]!)).join(' ')\n return [row(headers), widths.map((width) => '-'.repeat(width)).join(' '), ...rows.map(row)].join(\n '\\n'\n )\n}\n\nexport function formatNetworkOverview(document: NetworkCapabilitiesDocument): string {\n if (document.networks.length === 0) return 'No supported networks advertised.'\n const rows = document.networks.map((network) => [\n displayName(network),\n statusLabel(network),\n datasetLabel(network),\n ])\n return formatTable(['Network', 'Status', 'Dataset'], rows, [14, 10, 38])\n}\n\nexport function formatNetworkCapabilities(document: NetworkCapabilitiesDocument): string {\n if (document.networks.length === 0) return 'No supported networks advertised.'\n const networkRows = document.networks.flatMap((network) => {\n const toolLines = availableToolLines(network)\n return toolLines.map((toolLine, index) => [\n index === 0 ? displayName(network) : '',\n index === 0 ? datasetLabel(network) : '',\n toolLine,\n ])\n })\n return formatTable(['Network', 'Dataset', 'Chain Insights tools'], networkRows, [14, 38, 64])\n}\n\nexport function findNetworkCapability(\n document: NetworkCapabilitiesDocument,\n name: string\n): NetworkCapability | undefined {\n const normalizedName = name.trim().toLowerCase()\n if (!normalizedName) return undefined\n return document.networks.find((network) =>\n [network.network, network.display_name].some(\n (candidate) => candidate?.trim().toLowerCase() === normalizedName\n )\n )\n}\n\nexport function formatNetworkCapability(network: NetworkCapability): string {\n const rows = [\n ['Network', network.display_name || network.network],\n ['Identifier', network.network],\n ['Status', network.default ? `${network.status} (default)` : network.status],\n ['Dataset', datasetLabel(network)],\n ['Available tools', availableTools(network).join(', ') || 'none'],\n ]\n const labelWidth = Math.max(...rows.map(([label]) => label.length))\n return rows.map(([label, value]) => `${label.padEnd(labelWidth)} ${value}`).join('\\n')\n}\n"],"mappings":"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"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const require_rolldown_runtime = require("./rolldown-runtime-C0BPl7ul.cjs");
|
|
2
|
-
const require_client = require("./client-
|
|
2
|
+
const require_client = require("./client-Ypw9BNbn.cjs");
|
|
3
3
|
//#region src/mcp/capabilities.ts
|
|
4
4
|
var capabilities_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
|
|
5
5
|
PUBLIC_CHAIN_INSIGHTS_TOOL_STATUS: () => PUBLIC_CHAIN_INSIGHTS_TOOL_STATUS,
|
|
6
6
|
fetchNetworkCapabilities: () => fetchNetworkCapabilities,
|
|
7
|
+
findNetworkCapability: () => findNetworkCapability,
|
|
7
8
|
formatNetworkCapabilities: () => formatNetworkCapabilities,
|
|
9
|
+
formatNetworkCapability: () => formatNetworkCapability,
|
|
10
|
+
formatNetworkOverview: () => formatNetworkOverview,
|
|
8
11
|
mirrorGraphNetworkCapabilities: () => mirrorGraphNetworkCapabilities
|
|
9
12
|
});
|
|
10
13
|
const PUBLIC_CHAIN_INSIGHTS_TOOL_STATUS = {
|
|
@@ -97,31 +100,70 @@ function datasetLabel(network) {
|
|
|
97
100
|
if (dateRange === "") return blockRange;
|
|
98
101
|
return `${blockRange} / ${dateRange}`;
|
|
99
102
|
}
|
|
103
|
+
function displayName(network) {
|
|
104
|
+
return network.display_name || network.network;
|
|
105
|
+
}
|
|
106
|
+
function statusLabel(network) {
|
|
107
|
+
return network.default ? `${network.status} (default)` : network.status;
|
|
108
|
+
}
|
|
109
|
+
function formatTable(headers, rows, minimumWidths) {
|
|
110
|
+
const widths = headers.map((header, index) => Math.max(minimumWidths[index] ?? 0, header.length, ...rows.map((row) => row[index]?.length ?? 0)));
|
|
111
|
+
const row = (values) => values.map((value, index) => value.padEnd(widths[index])).join(" ");
|
|
112
|
+
return [
|
|
113
|
+
row(headers),
|
|
114
|
+
widths.map((width) => "-".repeat(width)).join(" "),
|
|
115
|
+
...rows.map(row)
|
|
116
|
+
].join("\n");
|
|
117
|
+
}
|
|
118
|
+
function formatNetworkOverview(document) {
|
|
119
|
+
if (document.networks.length === 0) return "No supported networks advertised.";
|
|
120
|
+
return formatTable([
|
|
121
|
+
"Network",
|
|
122
|
+
"Status",
|
|
123
|
+
"Dataset"
|
|
124
|
+
], document.networks.map((network) => [
|
|
125
|
+
displayName(network),
|
|
126
|
+
statusLabel(network),
|
|
127
|
+
datasetLabel(network)
|
|
128
|
+
]), [
|
|
129
|
+
14,
|
|
130
|
+
10,
|
|
131
|
+
38
|
|
132
|
+
]);
|
|
133
|
+
}
|
|
100
134
|
function formatNetworkCapabilities(document) {
|
|
101
135
|
if (document.networks.length === 0) return "No supported networks advertised.";
|
|
102
|
-
|
|
136
|
+
return formatTable([
|
|
103
137
|
"Network",
|
|
104
138
|
"Dataset",
|
|
105
|
-
"
|
|
106
|
-
]
|
|
107
|
-
|
|
139
|
+
"Chain Insights tools"
|
|
140
|
+
], document.networks.flatMap((network) => {
|
|
141
|
+
return availableToolLines(network).map((toolLine, index) => [
|
|
142
|
+
index === 0 ? displayName(network) : "",
|
|
143
|
+
index === 0 ? datasetLabel(network) : "",
|
|
144
|
+
toolLine
|
|
145
|
+
]);
|
|
146
|
+
}), [
|
|
108
147
|
14,
|
|
109
148
|
38,
|
|
110
149
|
64
|
|
150
|
+
]);
|
|
151
|
+
}
|
|
152
|
+
function findNetworkCapability(document, name) {
|
|
153
|
+
const normalizedName = name.trim().toLowerCase();
|
|
154
|
+
if (!normalizedName) return void 0;
|
|
155
|
+
return document.networks.find((network) => [network.network, network.display_name].some((candidate) => candidate?.trim().toLowerCase() === normalizedName));
|
|
156
|
+
}
|
|
157
|
+
function formatNetworkCapability(network) {
|
|
158
|
+
const rows = [
|
|
159
|
+
["Network", network.display_name || network.network],
|
|
160
|
+
["Identifier", network.network],
|
|
161
|
+
["Status", network.default ? `${network.status} (default)` : network.status],
|
|
162
|
+
["Dataset", datasetLabel(network)],
|
|
163
|
+
["Available tools", availableTools(network).join(", ") || "none"]
|
|
111
164
|
];
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
return availableToolLines(network).map((toolLine, index) => row([
|
|
115
|
-
index === 0 ? network.display_name || network.network : "",
|
|
116
|
-
index === 0 ? datasetLabel(network) : "",
|
|
117
|
-
toolLine
|
|
118
|
-
]));
|
|
119
|
-
});
|
|
120
|
-
return [
|
|
121
|
-
row(headers),
|
|
122
|
-
widths.map((width) => "-".repeat(width)).join(" "),
|
|
123
|
-
...networkRows
|
|
124
|
-
].join("\n");
|
|
165
|
+
const labelWidth = Math.max(...rows.map(([label]) => label.length));
|
|
166
|
+
return rows.map(([label, value]) => `${label.padEnd(labelWidth)} ${value}`).join("\n");
|
|
125
167
|
}
|
|
126
168
|
//#endregion
|
|
127
169
|
Object.defineProperty(exports, "capabilities_exports", {
|
package/dist/cli.cjs
CHANGED
|
@@ -23,7 +23,7 @@ function printMcpTextContent(result) {
|
|
|
23
23
|
const __dirname$1 = node_path.default.dirname((0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href));
|
|
24
24
|
const installerPath = node_path.default.resolve(__dirname$1, "..", "bin", "install.cjs");
|
|
25
25
|
const program = new commander.Command();
|
|
26
|
-
program.name("
|
|
26
|
+
program.name("cia").description("AML investigation toolkit for blockchain analysis").version(require_version.PACKAGE_INFO.version).option("--claude", "Install Claude Code skills globally to ~/.claude/skills/").option("--codex", "Install Codex skills globally to ~/.codex/skills/ and register MCP").option("--hermes", "Install Hermes skills globally to ~/.hermes/skills/chain-insights/ and register MCP");
|
|
27
27
|
const rawArgs = process.argv.slice(2);
|
|
28
28
|
const installerFlags = rawArgs.filter((a) => a === "--claude" || a === "--codex" || a === "--hermes");
|
|
29
29
|
const wantsHelpOrVersion = rawArgs.some((a) => a === "--help" || a === "-h" || a === "--version" || a === "-V");
|
|
@@ -52,7 +52,7 @@ function runInstaller(flag) {
|
|
|
52
52
|
async function withGraphMcpClient(name, fn) {
|
|
53
53
|
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
54
54
|
const config = await loadConfig();
|
|
55
|
-
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-
|
|
55
|
+
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-Ypw9BNbn.cjs")).then((n) => n.client_exports);
|
|
56
56
|
const paymentFetch = await createConfiguredGraphMcpFetch(config);
|
|
57
57
|
const { Client } = await import("@modelcontextprotocol/sdk/client/index.js");
|
|
58
58
|
const { StreamableHTTPClientTransport } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
@@ -71,14 +71,42 @@ async function withGraphMcpClient(name, fn) {
|
|
|
71
71
|
}
|
|
72
72
|
async function printNetworkCapabilities(opts) {
|
|
73
73
|
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
74
|
-
const { fetchNetworkCapabilities, formatNetworkCapabilities } = await Promise.resolve().then(() => require("./capabilities-
|
|
74
|
+
const { fetchNetworkCapabilities, formatNetworkCapabilities } = await Promise.resolve().then(() => require("./capabilities-CjpGnrVg.cjs")).then((n) => n.capabilities_exports);
|
|
75
75
|
const document = await fetchNetworkCapabilities(await loadConfig());
|
|
76
76
|
if (opts.json) console.log(JSON.stringify(document, null, 2));
|
|
77
77
|
else console.log(formatNetworkCapabilities(document));
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
async function printNetworkOverview(opts) {
|
|
80
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
81
|
+
const { fetchNetworkCapabilities, formatNetworkOverview } = await Promise.resolve().then(() => require("./capabilities-CjpGnrVg.cjs")).then((n) => n.capabilities_exports);
|
|
82
|
+
const document = await fetchNetworkCapabilities(await loadConfig());
|
|
83
|
+
if (opts.json) console.log(JSON.stringify(document, null, 2));
|
|
84
|
+
else console.log(formatNetworkOverview(document));
|
|
85
|
+
}
|
|
86
|
+
async function printNetworkCapability(name, opts) {
|
|
87
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
88
|
+
const { fetchNetworkCapabilities, findNetworkCapability, formatNetworkCapability } = await Promise.resolve().then(() => require("./capabilities-CjpGnrVg.cjs")).then((n) => n.capabilities_exports);
|
|
89
|
+
const document = await fetchNetworkCapabilities(await loadConfig());
|
|
90
|
+
const network = findNetworkCapability(document, name);
|
|
91
|
+
if (!network) {
|
|
92
|
+
const available = document.networks.map((candidate) => candidate.network).join(", ");
|
|
93
|
+
const suffix = available ? ` Available networks: ${available}.` : "";
|
|
94
|
+
throw new Error(`Network "${name}" is not supported.${suffix} Run \`cia networks\` to list supported networks.`);
|
|
95
|
+
}
|
|
96
|
+
if (opts.json) console.log(JSON.stringify(network, null, 2));
|
|
97
|
+
else console.log(formatNetworkCapability(network));
|
|
98
|
+
}
|
|
99
|
+
program.command("networks").description("Show supported network status and dataset overview").option("--json", "Print raw capability JSON").action(async (opts) => {
|
|
80
100
|
try {
|
|
81
|
-
await
|
|
101
|
+
await printNetworkOverview(opts);
|
|
102
|
+
} catch (err) {
|
|
103
|
+
console.error(err.message);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
program.command("network").description("Show details for one supported graph network").argument("<name>", "Network identifier or display name (for example: robinhood)").option("--json", "Print raw capability JSON for this network").action(async (name, opts) => {
|
|
108
|
+
try {
|
|
109
|
+
await printNetworkCapability(name, opts);
|
|
82
110
|
} catch (err) {
|
|
83
111
|
console.error(err.message);
|
|
84
112
|
process.exit(1);
|
|
@@ -219,7 +247,7 @@ program.command("config").description("Read or write configuration values").addC
|
|
|
219
247
|
})).addCommand(new commander.Command("set").argument("<key>", "Config key to write").argument("<value>", "Value to set").action(async (key, value) => {
|
|
220
248
|
if (key === "walletPrivateKey") {
|
|
221
249
|
try {
|
|
222
|
-
const { setWalletPrivateKey } = await Promise.resolve().then(() => require("./wallet-
|
|
250
|
+
const { setWalletPrivateKey } = await Promise.resolve().then(() => require("./wallet-B3hAr70M.cjs")).then((n) => n.wallet_exports);
|
|
223
251
|
const address = await setWalletPrivateKey(value);
|
|
224
252
|
console.log("Wallet private key encrypted and stored in ~/.chain-insights/wallet.json");
|
|
225
253
|
console.log(`Wallet address: ${address}`);
|
|
@@ -243,21 +271,52 @@ program.command("config").description("Read or write configuration values").addC
|
|
|
243
271
|
const displayed = key.toLowerCase().includes("token") ? "[redacted]" : coerced;
|
|
244
272
|
console.log(`Set ${key} = ${displayed}`);
|
|
245
273
|
}));
|
|
246
|
-
program.command("wallet").description("Manage the local Base USDC payment wallet").addCommand(new commander.Command("
|
|
274
|
+
program.command("wallet").description("Manage the local Base USDC payment wallet").addCommand(new commander.Command("create").description("Generate a new local Base payment wallet").action(async () => {
|
|
275
|
+
try {
|
|
276
|
+
const { isWalletConfigured, setWalletPrivateKey, walletPath } = await Promise.resolve().then(() => require("./wallet-B3hAr70M.cjs")).then((n) => n.wallet_exports);
|
|
277
|
+
const { createInterface } = await import("node:readline/promises");
|
|
278
|
+
const { formatWalletBackupWarning, generateWalletPrivateKey, isWalletBackupConfirmed } = await Promise.resolve().then(() => require("./create-DdggkF04.cjs")).then((n) => n.create_exports);
|
|
279
|
+
if (await isWalletConfigured()) throw new Error("A payment wallet already exists. Run `cia wallet address` to view it or use `cia wallet import <private-key> --force` to replace it.");
|
|
280
|
+
const privateKey = generateWalletPrivateKey();
|
|
281
|
+
const color = process.stderr.isTTY === true && process.env["NO_COLOR"] === void 0;
|
|
282
|
+
process.stderr.write(`${formatWalletBackupWarning(privateKey, { color })}\n`);
|
|
283
|
+
const prompt = createInterface({
|
|
284
|
+
input: process.stdin,
|
|
285
|
+
output: process.stderr
|
|
286
|
+
});
|
|
287
|
+
let answer;
|
|
288
|
+
try {
|
|
289
|
+
answer = await prompt.question("> ");
|
|
290
|
+
} finally {
|
|
291
|
+
prompt.close();
|
|
292
|
+
}
|
|
293
|
+
process.stderr.write("\n");
|
|
294
|
+
if (!isWalletBackupConfirmed(answer)) throw new Error("Wallet creation cancelled. The wallet was not saved.");
|
|
295
|
+
const address = await setWalletPrivateKey(privateKey);
|
|
296
|
+
console.log(`Wallet created: ${address}`);
|
|
297
|
+
console.log(`Encrypted local copy: ${walletPath()}`);
|
|
298
|
+
console.log("Next: cia wallet ready");
|
|
299
|
+
} catch (err) {
|
|
300
|
+
console.error(err.message);
|
|
301
|
+
process.exit(1);
|
|
302
|
+
}
|
|
303
|
+
})).addCommand(new commander.Command("import").description("Import a Base payment wallet").argument("<private-key>", "0x-prefixed EVM private key").option("--force", "Replace an existing wallet (the previous key is backed up next to wallet.json)").action(async (privateKey, opts) => {
|
|
247
304
|
try {
|
|
248
|
-
const { setWalletPrivateKey, isWalletConfigured } = await Promise.resolve().then(() => require("./wallet-
|
|
305
|
+
const { setWalletPrivateKey, isWalletConfigured } = await Promise.resolve().then(() => require("./wallet-B3hAr70M.cjs")).then((n) => n.wallet_exports);
|
|
249
306
|
const replacing = opts.force === true && await isWalletConfigured();
|
|
250
307
|
const address = await setWalletPrivateKey(privateKey, { force: opts.force });
|
|
251
308
|
if (replacing) console.log("Previous wallet key backed up next to ~/.chain-insights/wallet.json");
|
|
252
309
|
console.log(`Wallet imported: ${address}`);
|
|
253
|
-
console.log("
|
|
310
|
+
console.log("Keep your original private key backed up securely; it cannot be recovered from the encrypted local copy.");
|
|
311
|
+
console.log("Encrypted local copy: ~/.chain-insights/wallet.json");
|
|
312
|
+
console.log("Next: cia wallet ready");
|
|
254
313
|
} catch (err) {
|
|
255
314
|
console.error(err.message);
|
|
256
315
|
process.exit(1);
|
|
257
316
|
}
|
|
258
317
|
})).addCommand(new commander.Command("address").description("Print the local payment wallet address").action(async () => {
|
|
259
318
|
try {
|
|
260
|
-
const { getWalletAccount } = await Promise.resolve().then(() => require("./tools-
|
|
319
|
+
const { getWalletAccount } = await Promise.resolve().then(() => require("./tools-BHfphgy9.cjs")).then((n) => n.tools_exports);
|
|
261
320
|
const account = await getWalletAccount();
|
|
262
321
|
console.log(account.address);
|
|
263
322
|
} catch (err) {
|
|
@@ -266,7 +325,7 @@ program.command("wallet").description("Manage the local Base USDC payment wallet
|
|
|
266
325
|
}
|
|
267
326
|
})).addCommand(new commander.Command("balance").description("Show the local payment wallet Base USDC balance").action(async () => {
|
|
268
327
|
try {
|
|
269
|
-
const { getWalletBalanceText } = await Promise.resolve().then(() => require("./tools-
|
|
328
|
+
const { getWalletBalanceText } = await Promise.resolve().then(() => require("./tools-BHfphgy9.cjs")).then((n) => n.tools_exports);
|
|
270
329
|
console.log(await getWalletBalanceText());
|
|
271
330
|
} catch (err) {
|
|
272
331
|
console.error(err.message);
|
|
@@ -274,7 +333,7 @@ program.command("wallet").description("Manage the local Base USDC payment wallet
|
|
|
274
333
|
}
|
|
275
334
|
})).addCommand(new commander.Command("ready").description("Check and prepare the wallet for paid Chain Insights Graph calls").option("--check-only", "Only check readiness; do not submit the one-time payment setup").addOption(new commander.Option("--no-approve", "Deprecated alias for --check-only").hideHelp()).option("--payment-usdc <amount>", "USDC setup cap to prepare for paid calls", "1").addOption(new commander.Option("--approval-usdc <amount>", "Deprecated alias for --payment-usdc").hideHelp()).option("--json", "Print machine-readable readiness metadata").action(async (opts) => {
|
|
276
335
|
try {
|
|
277
|
-
const { formatWalletReadiness, parsePaymentApprovalUnits, prepareWalletForPaidCalls } = await Promise.resolve().then(() => require("./tools-
|
|
336
|
+
const { formatWalletReadiness, parsePaymentApprovalUnits, prepareWalletForPaidCalls } = await Promise.resolve().then(() => require("./tools-BHfphgy9.cjs")).then((n) => n.tools_exports);
|
|
278
337
|
const result = await prepareWalletForPaidCalls({
|
|
279
338
|
minimumApprovalUnits: parsePaymentApprovalUnits(opts.paymentUsdc ?? opts.approvalUsdc ?? "1"),
|
|
280
339
|
approve: opts.checkOnly ? false : opts.approve !== false
|
|
@@ -290,7 +349,7 @@ program.command("wallet").description("Manage the local Base USDC payment wallet
|
|
|
290
349
|
}
|
|
291
350
|
})).addCommand(new commander.Command("topup").description("Open a local browser page to top up the payment wallet").option("--no-open", "Print the top-up URL without opening a browser").option("--json", "Print machine-readable top-up metadata").action(async (opts) => {
|
|
292
351
|
try {
|
|
293
|
-
const { buildTopupInfo, getWalletAccount } = await Promise.resolve().then(() => require("./tools-
|
|
352
|
+
const { buildTopupInfo, getWalletAccount } = await Promise.resolve().then(() => require("./tools-BHfphgy9.cjs")).then((n) => n.tools_exports);
|
|
294
353
|
const { startTopupServer } = await Promise.resolve().then(() => require("./topup-server-YN3iHrHW.cjs")).then((n) => n.topup_server_exports);
|
|
295
354
|
const account = await getWalletAccount();
|
|
296
355
|
const url = await startTopupServer(account);
|
|
@@ -312,20 +371,20 @@ program.command("wallet").description("Manage the local Base USDC payment wallet
|
|
|
312
371
|
process.exit(1);
|
|
313
372
|
}
|
|
314
373
|
}));
|
|
315
|
-
program.command("mcp").description("Interact with the Chain Insights MCP endpoint").allowExcessArguments(false).addCommand(new commander.Command("networks").description("List
|
|
374
|
+
program.command("mcp").description("Interact with the Chain Insights MCP endpoint").allowExcessArguments(false).addCommand(new commander.Command("networks").description("List the detailed Chain Insights capability matrix and tool support").option("--json", "Print raw capability JSON").action(async (opts) => {
|
|
316
375
|
try {
|
|
317
376
|
await printNetworkCapabilities(opts);
|
|
318
377
|
} catch (err) {
|
|
319
378
|
console.error(err.message);
|
|
320
379
|
process.exit(1);
|
|
321
380
|
}
|
|
322
|
-
})).addCommand(new commander.Command("tools").description("List
|
|
381
|
+
})).addCommand(new commander.Command("tools").description("List remote GraphRAG MCP tools (cached for 24 hours)").option("--refresh", "Force refresh schema cache").action(async (opts) => {
|
|
323
382
|
try {
|
|
324
383
|
const { loadSchema, saveSchema } = await Promise.resolve().then(() => require("./schema-cache-n7Gbhvsj.cjs"));
|
|
325
|
-
const { formatToolsTable } = await Promise.resolve().then(() => require("./format-
|
|
384
|
+
const { formatToolsTable } = await Promise.resolve().then(() => require("./format-BjZuYDr8.cjs"));
|
|
326
385
|
const { visibleRemoteTools } = await Promise.resolve().then(() => require("./tool-visibility-C8F9Yoxy.cjs")).then((n) => n.tool_visibility_exports);
|
|
327
386
|
const { loadConfig } = await Promise.resolve().then(() => require("./config-B542AM4w.cjs")).then((n) => n.config_exports);
|
|
328
|
-
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-
|
|
387
|
+
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-Ypw9BNbn.cjs")).then((n) => n.client_exports);
|
|
329
388
|
const config = await loadConfig();
|
|
330
389
|
const graphMcpEndpoint = resolveGraphMcpEndpoint(config);
|
|
331
390
|
let tools = opts.refresh ? null : await loadSchema(graphMcpEndpoint);
|
|
@@ -373,7 +432,7 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
373
432
|
assertPublicMcpToolName(tool);
|
|
374
433
|
validatePublicMcpToolArguments(tool, args);
|
|
375
434
|
if (tool === "wallet_balance") {
|
|
376
|
-
const { getWalletBalanceText } = await Promise.resolve().then(() => require("./tools-
|
|
435
|
+
const { getWalletBalanceText } = await Promise.resolve().then(() => require("./tools-BHfphgy9.cjs")).then((n) => n.tools_exports);
|
|
377
436
|
console.log(await getWalletBalanceText());
|
|
378
437
|
return;
|
|
379
438
|
}
|
|
@@ -395,7 +454,7 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
395
454
|
} catch (err) {
|
|
396
455
|
const { isMissingUsageStatusToolError, primitiveBackendUsageStatus, usageStatusText } = await Promise.resolve().then(() => require("./usage-status-BdwwgYsu.cjs")).then((n) => n.usage_status_exports);
|
|
397
456
|
if (!isMissingUsageStatusToolError(err)) throw err;
|
|
398
|
-
const { resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-
|
|
457
|
+
const { resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-Ypw9BNbn.cjs")).then((n) => n.client_exports);
|
|
399
458
|
console.log(usageStatusText(primitiveBackendUsageStatus(resolveGraphMcpEndpoint(config))));
|
|
400
459
|
}
|
|
401
460
|
return;
|