chain-insights 0.3.19 → 0.8.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +54 -36
- package/bin/install.cjs +4 -7
- package/dist/active-BQopLul8.mjs.map +1 -1
- package/dist/{active-XWv72R1X.cjs → active-Bj6dohpc.cjs} +5 -5
- package/dist/{app-DBrqk_iP.cjs → app-CDnQ2JzJ.cjs} +6 -6
- package/dist/{app-DXwILI_a.mjs → app-qkaa5DYD.mjs} +2 -2
- package/dist/{app-DXwILI_a.mjs.map → app-qkaa5DYD.mjs.map} +1 -1
- package/dist/{artifact-server-v0WgTPFT.cjs → artifact-server-BXA0gdZE.cjs} +1 -1
- package/dist/{artifact-server-CcmLBv1j.mjs → artifact-server-Dw7AI6B1.mjs} +2 -2
- package/dist/{artifact-server-CcmLBv1j.mjs.map → artifact-server-Dw7AI6B1.mjs.map} +1 -1
- package/dist/{call-args-DPXdX3_D.mjs → call-args-D3UajHDq.mjs} +3 -5
- package/dist/call-args-D3UajHDq.mjs.map +1 -0
- package/dist/{call-args-CcUV6gFS.cjs → call-args-DyU9d6tT.cjs} +2 -4
- package/dist/capabilities-Bnlnmu6P.mjs +137 -0
- package/dist/capabilities-Bnlnmu6P.mjs.map +1 -0
- package/dist/capabilities-CKBZbIBf.cjs +136 -0
- package/dist/cli.cjs +185 -235
- package/dist/cli.mjs +176 -226
- package/dist/cli.mjs.map +1 -1
- package/dist/{client-ytTO0mcZ.mjs → client-C-A_VCul.mjs} +7 -6
- package/dist/client-C-A_VCul.mjs.map +1 -0
- package/dist/{client-BY-56ojr.cjs → client-oJdEMUFE.cjs} +8 -7
- package/dist/{config-C6zM8Xir.mjs → config-BSMWXI4K.mjs} +3 -3
- package/dist/{config-C6zM8Xir.mjs.map → config-BSMWXI4K.mjs.map} +1 -1
- package/dist/{config-CkW404Cs.cjs → config-Cj4Jwv08.cjs} +6 -6
- package/dist/format-Bq94jSyw.mjs.map +1 -1
- package/dist/{graph-normalizer-DbjlbMpz.cjs → graph-normalizer-B2Q2lgVy.cjs} +2 -5
- package/dist/{graph-normalizer-CXP06jKh.mjs → graph-normalizer-BA3Rbd6l.mjs} +3 -6
- package/dist/graph-normalizer-BA3Rbd6l.mjs.map +1 -0
- package/dist/{graph-reports-CEq-Mvx0.mjs → graph-reports-B6yoYbPq.mjs} +2 -2
- package/dist/{graph-reports-CEq-Mvx0.mjs.map → graph-reports-B6yoYbPq.mjs.map} +1 -1
- package/dist/{graph-reports-CkglRtg4.cjs → graph-reports-DSHSp5HL.cjs} +5 -5
- package/dist/{html-generator-BFKafL8y.cjs → html-generator-DF0F6nUI.cjs} +5 -5
- package/dist/{html-generator-D4fX71hI.mjs → html-generator-DjWagEB5.mjs} +2 -2
- package/dist/html-generator-DjWagEB5.mjs.map +1 -0
- package/dist/index.cjs +10 -8
- package/dist/index.d.cts +34 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +34 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +8 -8
- package/dist/{init-BGDvGreX.mjs → init-B3sU6b3N.mjs} +74 -12
- package/dist/init-B3sU6b3N.mjs.map +1 -0
- package/dist/{init-Cuw9TznI.cjs → init-BmyNlJ9M.cjs} +75 -13
- package/dist/{mcp-endpoint-QQ5Lbqc2.mjs → mcp-endpoint-B6QETHQM.mjs} +2 -2
- package/dist/{mcp-endpoint-QQ5Lbqc2.mjs.map → mcp-endpoint-B6QETHQM.mjs.map} +1 -1
- package/dist/{mcp-endpoint-cQIZSjkK.cjs → mcp-endpoint-CwsaQ8gL.cjs} +1 -1
- package/dist/mcp-proxy.cjs +711 -892
- package/dist/mcp-proxy.d.cts.map +1 -1
- package/dist/mcp-proxy.d.mts.map +1 -1
- package/dist/mcp-proxy.mjs +707 -888
- package/dist/mcp-proxy.mjs.map +1 -1
- package/dist/{output-root-DI0tzA0X.cjs → output-root-C1PFNCqb.cjs} +4 -4
- package/dist/{public-tools-brHmHGYm.mjs → public-tools-BTxuEFAS.mjs} +906 -1487
- package/dist/public-tools-BTxuEFAS.mjs.map +1 -0
- package/dist/{public-tools-BREojpU7.cjs → public-tools-H9x9ob-q.cjs} +907 -1495
- package/dist/remote-trace-args-BkWtRX_h.cjs +29 -0
- package/dist/remote-trace-args-umlI_GIv.mjs +31 -0
- package/dist/remote-trace-args-umlI_GIv.mjs.map +1 -0
- package/dist/resolve-port-CbaEoODz.cjs +18 -0
- package/dist/resolve-port-DxPK7Ipx.mjs +20 -0
- package/dist/resolve-port-DxPK7Ipx.mjs.map +1 -0
- package/dist/{schema-D_qwaQA5.mjs → schema-BbtE--TF.mjs} +2 -2
- package/dist/{schema-D_qwaQA5.mjs.map → schema-BbtE--TF.mjs.map} +1 -1
- package/dist/{schema-Dr6JXSOF.cjs → schema-Byt6GeSZ.cjs} +6 -6
- package/dist/{schema-cache-CJk1EL3L.cjs → schema-cache-CX0r2UQp.cjs} +3 -3
- package/dist/{server-ColyTG1t.cjs → server-B5HlORyO.cjs} +3 -3
- package/dist/{server-BK4bfOiv.mjs → server-Dy4d0Td1.mjs} +2 -2
- package/dist/{server-BK4bfOiv.mjs.map → server-Dy4d0Td1.mjs.map} +1 -1
- package/dist/templates/graph.html +11 -10
- package/dist/tool-visibility-9-rvB91K.mjs +98 -0
- package/dist/tool-visibility-9-rvB91K.mjs.map +1 -0
- package/dist/tool-visibility-Cl2p7Ghx.cjs +118 -0
- package/dist/{tools-v6kcdojg.mjs → tools-B4rwKdvU.mjs} +53 -13
- package/dist/tools-B4rwKdvU.mjs.map +1 -0
- package/dist/{tools-BhTI3Lmg.cjs → tools-e87fylVa.cjs} +71 -13
- package/dist/{topup-server-DhYlOOBM.cjs → topup-server-B8anfXcq.cjs} +2 -2
- package/dist/topup-server-R3dNp-p8.mjs.map +1 -1
- package/dist/update-CJUfGCxs.mjs.map +1 -1
- package/dist/usage-status-D2uosC7s.mjs +36 -0
- package/dist/usage-status-D2uosC7s.mjs.map +1 -0
- package/dist/usage-status-H1xgCu99.cjs +44 -0
- package/dist/{viz-BBvY-wXz.cjs → viz-C9m5OuQT.cjs} +9 -8
- package/dist/{viz-D8umSF-t.mjs → viz-Cvb81rMm.mjs} +5 -4
- package/dist/viz-Cvb81rMm.mjs.map +1 -0
- package/dist/{wallet-BL0fJC29.mjs → wallet-BrTTnf7w.mjs} +43 -2
- package/dist/wallet-BrTTnf7w.mjs.map +1 -0
- package/dist/{wallet-gC2jxh7j.cjs → wallet-C2yVjcSY.cjs} +47 -6
- package/docs/architecture.md +10 -10
- package/docs/contributing.md +2 -9
- package/docs/debugging.md +33 -17
- package/docs/development.md +27 -0
- package/docs/graph-tools.md +33 -119
- package/docs/investigation-workspaces.md +1 -1
- package/docs/mcp-proxy.md +69 -52
- package/package.json +17 -13
- package/skills/chain-insights-address-risk/SKILL.md +1 -1
- package/skills/chain-insights-bittensor-cypher/SKILL.md +61 -52
- package/skills/chain-insights-cypher/SKILL.md +44 -23
- package/skills/chain-insights-cypher/agents/openai.yaml +1 -1
- package/skills/chain-insights-cypher/references/memgraph-examples.md +40 -34
- package/skills/chain-insights-developer-experience/SKILL.md +8 -8
- package/skills/chain-insights-investigation/SKILL.md +9 -9
- package/skills/chain-insights-investigation/scripts/run-target-uat.sh +12 -12
- package/skills/chain-insights-trace-funds/SKILL.md +13 -10
- package/skills/test-chain-insights-graph/SKILL.md +81 -0
- package/skills/test-chain-insights-graph/agents/openai.yaml +4 -0
- package/skills/{test-chain-insights-graphrag-mcp → test-chain-insights-graph}/scripts/run-uat.sh +260 -256
- package/dist/call-args-DPXdX3_D.mjs.map +0 -1
- package/dist/capabilities-CM72SErE.mjs +0 -81
- package/dist/capabilities-CM72SErE.mjs.map +0 -1
- package/dist/capabilities-DGeF-oHc.cjs +0 -80
- package/dist/client-ytTO0mcZ.mjs.map +0 -1
- package/dist/graph-normalizer-CXP06jKh.mjs.map +0 -1
- package/dist/html-generator-D4fX71hI.mjs.map +0 -1
- package/dist/init-BGDvGreX.mjs.map +0 -1
- package/dist/public-tools-brHmHGYm.mjs.map +0 -1
- package/dist/setup-CDha4B9s.cjs +0 -81
- package/dist/setup-yXK8agdn.mjs +0 -80
- package/dist/setup-yXK8agdn.mjs.map +0 -1
- package/dist/tool-visibility--QPgrRE5.cjs +0 -42
- package/dist/tool-visibility-nr6XqO1F.mjs +0 -34
- package/dist/tool-visibility-nr6XqO1F.mjs.map +0 -1
- package/dist/tools-v6kcdojg.mjs.map +0 -1
- package/dist/viz-D8umSF-t.mjs.map +0 -1
- package/dist/wallet-BL0fJC29.mjs.map +0 -1
- package/skills/chain-insights-exposure-analysis/SKILL.md +0 -83
- package/skills/test-chain-insights-graphrag-mcp/SKILL.md +0 -75
- package/skills/test-chain-insights-graphrag-mcp/agents/openai.yaml +0 -4
- /package/dist/{chunk-DakpK96I.cjs → rolldown-runtime-DakpK96I.cjs} +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
const require_client = require("./client-oJdEMUFE.cjs");
|
|
2
|
+
//#region src/mcp/capabilities.ts
|
|
3
|
+
const BITTENSOR_SEMANTIC_NETWORKS = /* @__PURE__ */ new Set([
|
|
4
|
+
"bittensor",
|
|
5
|
+
"bittensor_evm",
|
|
6
|
+
"bittensor_semantic"
|
|
7
|
+
]);
|
|
8
|
+
const PUBLIC_CHAIN_INSIGHTS_TOOL_STATUS = {
|
|
9
|
+
aml_address_risk: "available",
|
|
10
|
+
aml_trace_victim_funds: "available",
|
|
11
|
+
aml_trace_deposit_sources: "available",
|
|
12
|
+
aml_trace_suspect_funds: "available",
|
|
13
|
+
graph_query: "available",
|
|
14
|
+
graph_query_batch: "available",
|
|
15
|
+
meta_network_capabilities: "available",
|
|
16
|
+
meta_usage_status: "available",
|
|
17
|
+
wallet_balance: "available"
|
|
18
|
+
};
|
|
19
|
+
const AVAILABLE_TOOLS_PER_LINE = 3;
|
|
20
|
+
function publicNetworkCapabilities(document) {
|
|
21
|
+
const source = document.networks.find((network) => BITTENSOR_SEMANTIC_NETWORKS.has(network.network));
|
|
22
|
+
return {
|
|
23
|
+
schema: "chain-insights.network-capabilities.v1",
|
|
24
|
+
networks: source ? [{
|
|
25
|
+
network: "bittensor",
|
|
26
|
+
display_name: "Bittensor",
|
|
27
|
+
status: source.status || "live",
|
|
28
|
+
default: source.default !== false,
|
|
29
|
+
layers: {
|
|
30
|
+
facts: { enabled: source.layers.facts?.enabled === true },
|
|
31
|
+
risk: { enabled: source.layers.risk?.enabled === true },
|
|
32
|
+
topology: {
|
|
33
|
+
enabled: source.layers.topology?.enabled === true,
|
|
34
|
+
...source.layers.topology?.live ? { live: source.layers.topology.live } : {},
|
|
35
|
+
...source.layers.topology?.archive ? { archive: source.layers.topology.archive } : {}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
...source.coverage ? { coverage: source.coverage } : {},
|
|
39
|
+
...source.freshness ? { freshness: source.freshness } : {},
|
|
40
|
+
tools: PUBLIC_CHAIN_INSIGHTS_TOOL_STATUS
|
|
41
|
+
}] : []
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function metadataNetworksUrl(endpoint) {
|
|
45
|
+
const url = new URL(endpoint);
|
|
46
|
+
url.pathname = "/metadata/networks";
|
|
47
|
+
url.search = "";
|
|
48
|
+
url.hash = "";
|
|
49
|
+
return url;
|
|
50
|
+
}
|
|
51
|
+
async function fetchNetworkCapabilities(config) {
|
|
52
|
+
const request = metadataNetworksUrl(require_client.resolveGraphMcpEndpoint(config));
|
|
53
|
+
const headers = new Headers();
|
|
54
|
+
const token = config.graphMcpAuthToken?.trim() || config.mcpAuthToken?.trim();
|
|
55
|
+
if (token) require_client.applyMcpAuthHeaders(headers, token);
|
|
56
|
+
let response;
|
|
57
|
+
try {
|
|
58
|
+
response = await fetch(request, { headers });
|
|
59
|
+
} catch (err) {
|
|
60
|
+
throw new Error(`network capabilities unavailable at ${request}: ${err.message}`);
|
|
61
|
+
}
|
|
62
|
+
if (!response.ok) throw new Error(`network capabilities unavailable at ${request}: HTTP ${response.status}`);
|
|
63
|
+
const parsed = await response.json();
|
|
64
|
+
if (parsed.schema !== "chain-insights.network-capabilities.v1" || !Array.isArray(parsed.networks)) throw new Error("network capabilities response has unsupported schema");
|
|
65
|
+
return publicNetworkCapabilities(parsed);
|
|
66
|
+
}
|
|
67
|
+
function layerValue(network, layer) {
|
|
68
|
+
if (!network.layers[layer]?.enabled) return "no";
|
|
69
|
+
return "yes";
|
|
70
|
+
}
|
|
71
|
+
function availableTools(network) {
|
|
72
|
+
const effectiveTools = BITTENSOR_SEMANTIC_NETWORKS.has(network.network) && network.layers.topology?.enabled === true ? {
|
|
73
|
+
...network.tools ?? {},
|
|
74
|
+
...PUBLIC_CHAIN_INSIGHTS_TOOL_STATUS
|
|
75
|
+
} : network.tools ?? {};
|
|
76
|
+
return Object.entries(effectiveTools).filter(([, status]) => status === "available").map(([name]) => name).sort();
|
|
77
|
+
}
|
|
78
|
+
function availableToolLines(network) {
|
|
79
|
+
const tools = availableTools(network);
|
|
80
|
+
if (tools.length === 0) return ["none"];
|
|
81
|
+
const lines = [];
|
|
82
|
+
for (let index = 0; index < tools.length; index += AVAILABLE_TOOLS_PER_LINE) lines.push(tools.slice(index, index + AVAILABLE_TOOLS_PER_LINE).join(", "));
|
|
83
|
+
return lines;
|
|
84
|
+
}
|
|
85
|
+
function shortDate(value) {
|
|
86
|
+
if (!value) return "";
|
|
87
|
+
return value.slice(0, 10);
|
|
88
|
+
}
|
|
89
|
+
function datasetLabel(network) {
|
|
90
|
+
const coverage = network.coverage;
|
|
91
|
+
if (!coverage) return "unknown";
|
|
92
|
+
const blockRange = coverage.from_block !== void 0 && coverage.to_block !== void 0 ? `${coverage.from_block}..${coverage.to_block}` : "blocks unknown";
|
|
93
|
+
const dateRange = coverage.from_timestamp && coverage.to_timestamp ? `${shortDate(coverage.from_timestamp)}..${shortDate(coverage.to_timestamp)}` : "";
|
|
94
|
+
if (blockRange === "blocks unknown" && dateRange === "") return "unknown";
|
|
95
|
+
if (blockRange === "blocks unknown") return dateRange;
|
|
96
|
+
if (dateRange === "") return blockRange;
|
|
97
|
+
return `${blockRange} / ${dateRange}`;
|
|
98
|
+
}
|
|
99
|
+
function formatNetworkCapabilities(document) {
|
|
100
|
+
if (document.networks.length === 0) return "No supported networks advertised.";
|
|
101
|
+
const headers = [
|
|
102
|
+
"Network",
|
|
103
|
+
"Topology",
|
|
104
|
+
"Facts",
|
|
105
|
+
"Risk",
|
|
106
|
+
"Dataset",
|
|
107
|
+
"Available tools"
|
|
108
|
+
];
|
|
109
|
+
const widths = [
|
|
110
|
+
14,
|
|
111
|
+
10,
|
|
112
|
+
8,
|
|
113
|
+
8,
|
|
114
|
+
38,
|
|
115
|
+
64
|
|
116
|
+
];
|
|
117
|
+
const row = (values) => values.map((value, index) => value.padEnd(widths[index])).join(" ");
|
|
118
|
+
const networkRows = document.networks.flatMap((network) => {
|
|
119
|
+
return availableToolLines(network).map((toolLine, index) => row([
|
|
120
|
+
index === 0 ? network.display_name || network.network : "",
|
|
121
|
+
index === 0 ? layerValue(network, "topology") : "",
|
|
122
|
+
index === 0 ? layerValue(network, "facts") : "",
|
|
123
|
+
index === 0 ? layerValue(network, "risk") : "",
|
|
124
|
+
index === 0 ? datasetLabel(network) : "",
|
|
125
|
+
toolLine
|
|
126
|
+
]));
|
|
127
|
+
});
|
|
128
|
+
return [
|
|
129
|
+
row(headers),
|
|
130
|
+
widths.map((width) => "-".repeat(width)).join(" "),
|
|
131
|
+
...networkRows
|
|
132
|
+
].join("\n");
|
|
133
|
+
}
|
|
134
|
+
//#endregion
|
|
135
|
+
exports.fetchNetworkCapabilities = fetchNetworkCapabilities;
|
|
136
|
+
exports.formatNetworkCapabilities = formatNetworkCapabilities;
|