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.
Files changed (131) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +54 -36
  3. package/bin/install.cjs +4 -7
  4. package/dist/active-BQopLul8.mjs.map +1 -1
  5. package/dist/{active-XWv72R1X.cjs → active-Bj6dohpc.cjs} +5 -5
  6. package/dist/{app-DBrqk_iP.cjs → app-CDnQ2JzJ.cjs} +6 -6
  7. package/dist/{app-DXwILI_a.mjs → app-qkaa5DYD.mjs} +2 -2
  8. package/dist/{app-DXwILI_a.mjs.map → app-qkaa5DYD.mjs.map} +1 -1
  9. package/dist/{artifact-server-v0WgTPFT.cjs → artifact-server-BXA0gdZE.cjs} +1 -1
  10. package/dist/{artifact-server-CcmLBv1j.mjs → artifact-server-Dw7AI6B1.mjs} +2 -2
  11. package/dist/{artifact-server-CcmLBv1j.mjs.map → artifact-server-Dw7AI6B1.mjs.map} +1 -1
  12. package/dist/{call-args-DPXdX3_D.mjs → call-args-D3UajHDq.mjs} +3 -5
  13. package/dist/call-args-D3UajHDq.mjs.map +1 -0
  14. package/dist/{call-args-CcUV6gFS.cjs → call-args-DyU9d6tT.cjs} +2 -4
  15. package/dist/capabilities-Bnlnmu6P.mjs +137 -0
  16. package/dist/capabilities-Bnlnmu6P.mjs.map +1 -0
  17. package/dist/capabilities-CKBZbIBf.cjs +136 -0
  18. package/dist/cli.cjs +185 -235
  19. package/dist/cli.mjs +176 -226
  20. package/dist/cli.mjs.map +1 -1
  21. package/dist/{client-ytTO0mcZ.mjs → client-C-A_VCul.mjs} +7 -6
  22. package/dist/client-C-A_VCul.mjs.map +1 -0
  23. package/dist/{client-BY-56ojr.cjs → client-oJdEMUFE.cjs} +8 -7
  24. package/dist/{config-C6zM8Xir.mjs → config-BSMWXI4K.mjs} +3 -3
  25. package/dist/{config-C6zM8Xir.mjs.map → config-BSMWXI4K.mjs.map} +1 -1
  26. package/dist/{config-CkW404Cs.cjs → config-Cj4Jwv08.cjs} +6 -6
  27. package/dist/format-Bq94jSyw.mjs.map +1 -1
  28. package/dist/{graph-normalizer-DbjlbMpz.cjs → graph-normalizer-B2Q2lgVy.cjs} +2 -5
  29. package/dist/{graph-normalizer-CXP06jKh.mjs → graph-normalizer-BA3Rbd6l.mjs} +3 -6
  30. package/dist/graph-normalizer-BA3Rbd6l.mjs.map +1 -0
  31. package/dist/{graph-reports-CEq-Mvx0.mjs → graph-reports-B6yoYbPq.mjs} +2 -2
  32. package/dist/{graph-reports-CEq-Mvx0.mjs.map → graph-reports-B6yoYbPq.mjs.map} +1 -1
  33. package/dist/{graph-reports-CkglRtg4.cjs → graph-reports-DSHSp5HL.cjs} +5 -5
  34. package/dist/{html-generator-BFKafL8y.cjs → html-generator-DF0F6nUI.cjs} +5 -5
  35. package/dist/{html-generator-D4fX71hI.mjs → html-generator-DjWagEB5.mjs} +2 -2
  36. package/dist/html-generator-DjWagEB5.mjs.map +1 -0
  37. package/dist/index.cjs +10 -8
  38. package/dist/index.d.cts +34 -2
  39. package/dist/index.d.cts.map +1 -1
  40. package/dist/index.d.mts +34 -2
  41. package/dist/index.d.mts.map +1 -1
  42. package/dist/index.mjs +8 -8
  43. package/dist/{init-BGDvGreX.mjs → init-B3sU6b3N.mjs} +74 -12
  44. package/dist/init-B3sU6b3N.mjs.map +1 -0
  45. package/dist/{init-Cuw9TznI.cjs → init-BmyNlJ9M.cjs} +75 -13
  46. package/dist/{mcp-endpoint-QQ5Lbqc2.mjs → mcp-endpoint-B6QETHQM.mjs} +2 -2
  47. package/dist/{mcp-endpoint-QQ5Lbqc2.mjs.map → mcp-endpoint-B6QETHQM.mjs.map} +1 -1
  48. package/dist/{mcp-endpoint-cQIZSjkK.cjs → mcp-endpoint-CwsaQ8gL.cjs} +1 -1
  49. package/dist/mcp-proxy.cjs +711 -892
  50. package/dist/mcp-proxy.d.cts.map +1 -1
  51. package/dist/mcp-proxy.d.mts.map +1 -1
  52. package/dist/mcp-proxy.mjs +707 -888
  53. package/dist/mcp-proxy.mjs.map +1 -1
  54. package/dist/{output-root-DI0tzA0X.cjs → output-root-C1PFNCqb.cjs} +4 -4
  55. package/dist/{public-tools-brHmHGYm.mjs → public-tools-BTxuEFAS.mjs} +906 -1487
  56. package/dist/public-tools-BTxuEFAS.mjs.map +1 -0
  57. package/dist/{public-tools-BREojpU7.cjs → public-tools-H9x9ob-q.cjs} +907 -1495
  58. package/dist/remote-trace-args-BkWtRX_h.cjs +29 -0
  59. package/dist/remote-trace-args-umlI_GIv.mjs +31 -0
  60. package/dist/remote-trace-args-umlI_GIv.mjs.map +1 -0
  61. package/dist/resolve-port-CbaEoODz.cjs +18 -0
  62. package/dist/resolve-port-DxPK7Ipx.mjs +20 -0
  63. package/dist/resolve-port-DxPK7Ipx.mjs.map +1 -0
  64. package/dist/{schema-D_qwaQA5.mjs → schema-BbtE--TF.mjs} +2 -2
  65. package/dist/{schema-D_qwaQA5.mjs.map → schema-BbtE--TF.mjs.map} +1 -1
  66. package/dist/{schema-Dr6JXSOF.cjs → schema-Byt6GeSZ.cjs} +6 -6
  67. package/dist/{schema-cache-CJk1EL3L.cjs → schema-cache-CX0r2UQp.cjs} +3 -3
  68. package/dist/{server-ColyTG1t.cjs → server-B5HlORyO.cjs} +3 -3
  69. package/dist/{server-BK4bfOiv.mjs → server-Dy4d0Td1.mjs} +2 -2
  70. package/dist/{server-BK4bfOiv.mjs.map → server-Dy4d0Td1.mjs.map} +1 -1
  71. package/dist/templates/graph.html +11 -10
  72. package/dist/tool-visibility-9-rvB91K.mjs +98 -0
  73. package/dist/tool-visibility-9-rvB91K.mjs.map +1 -0
  74. package/dist/tool-visibility-Cl2p7Ghx.cjs +118 -0
  75. package/dist/{tools-v6kcdojg.mjs → tools-B4rwKdvU.mjs} +53 -13
  76. package/dist/tools-B4rwKdvU.mjs.map +1 -0
  77. package/dist/{tools-BhTI3Lmg.cjs → tools-e87fylVa.cjs} +71 -13
  78. package/dist/{topup-server-DhYlOOBM.cjs → topup-server-B8anfXcq.cjs} +2 -2
  79. package/dist/topup-server-R3dNp-p8.mjs.map +1 -1
  80. package/dist/update-CJUfGCxs.mjs.map +1 -1
  81. package/dist/usage-status-D2uosC7s.mjs +36 -0
  82. package/dist/usage-status-D2uosC7s.mjs.map +1 -0
  83. package/dist/usage-status-H1xgCu99.cjs +44 -0
  84. package/dist/{viz-BBvY-wXz.cjs → viz-C9m5OuQT.cjs} +9 -8
  85. package/dist/{viz-D8umSF-t.mjs → viz-Cvb81rMm.mjs} +5 -4
  86. package/dist/viz-Cvb81rMm.mjs.map +1 -0
  87. package/dist/{wallet-BL0fJC29.mjs → wallet-BrTTnf7w.mjs} +43 -2
  88. package/dist/wallet-BrTTnf7w.mjs.map +1 -0
  89. package/dist/{wallet-gC2jxh7j.cjs → wallet-C2yVjcSY.cjs} +47 -6
  90. package/docs/architecture.md +10 -10
  91. package/docs/contributing.md +2 -9
  92. package/docs/debugging.md +33 -17
  93. package/docs/development.md +27 -0
  94. package/docs/graph-tools.md +33 -119
  95. package/docs/investigation-workspaces.md +1 -1
  96. package/docs/mcp-proxy.md +69 -52
  97. package/package.json +17 -13
  98. package/skills/chain-insights-address-risk/SKILL.md +1 -1
  99. package/skills/chain-insights-bittensor-cypher/SKILL.md +61 -52
  100. package/skills/chain-insights-cypher/SKILL.md +44 -23
  101. package/skills/chain-insights-cypher/agents/openai.yaml +1 -1
  102. package/skills/chain-insights-cypher/references/memgraph-examples.md +40 -34
  103. package/skills/chain-insights-developer-experience/SKILL.md +8 -8
  104. package/skills/chain-insights-investigation/SKILL.md +9 -9
  105. package/skills/chain-insights-investigation/scripts/run-target-uat.sh +12 -12
  106. package/skills/chain-insights-trace-funds/SKILL.md +13 -10
  107. package/skills/test-chain-insights-graph/SKILL.md +81 -0
  108. package/skills/test-chain-insights-graph/agents/openai.yaml +4 -0
  109. package/skills/{test-chain-insights-graphrag-mcp → test-chain-insights-graph}/scripts/run-uat.sh +260 -256
  110. package/dist/call-args-DPXdX3_D.mjs.map +0 -1
  111. package/dist/capabilities-CM72SErE.mjs +0 -81
  112. package/dist/capabilities-CM72SErE.mjs.map +0 -1
  113. package/dist/capabilities-DGeF-oHc.cjs +0 -80
  114. package/dist/client-ytTO0mcZ.mjs.map +0 -1
  115. package/dist/graph-normalizer-CXP06jKh.mjs.map +0 -1
  116. package/dist/html-generator-D4fX71hI.mjs.map +0 -1
  117. package/dist/init-BGDvGreX.mjs.map +0 -1
  118. package/dist/public-tools-brHmHGYm.mjs.map +0 -1
  119. package/dist/setup-CDha4B9s.cjs +0 -81
  120. package/dist/setup-yXK8agdn.mjs +0 -80
  121. package/dist/setup-yXK8agdn.mjs.map +0 -1
  122. package/dist/tool-visibility--QPgrRE5.cjs +0 -42
  123. package/dist/tool-visibility-nr6XqO1F.mjs +0 -34
  124. package/dist/tool-visibility-nr6XqO1F.mjs.map +0 -1
  125. package/dist/tools-v6kcdojg.mjs.map +0 -1
  126. package/dist/viz-D8umSF-t.mjs.map +0 -1
  127. package/dist/wallet-BL0fJC29.mjs.map +0 -1
  128. package/skills/chain-insights-exposure-analysis/SKILL.md +0 -83
  129. package/skills/test-chain-insights-graphrag-mcp/SKILL.md +0 -75
  130. package/skills/test-chain-insights-graphrag-mcp/agents/openai.yaml +0 -4
  131. /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;