chain-insights 0.2.17 → 0.2.20
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 +38 -0
- package/bin/cli.js +2 -3
- package/bin/install.cjs +0 -1
- package/dist/{active-Dv7Tu-O4.cjs → active-BVr55kvW.cjs} +1 -1
- package/dist/{active-BSrxLKwn.mjs → active-ByNgjuAg.mjs} +2 -2
- package/dist/{active-BSrxLKwn.mjs.map → active-ByNgjuAg.mjs.map} +1 -1
- package/dist/{app-Dq1TdB6p.cjs → app-BxojXjtB.cjs} +4 -4
- package/dist/{app-BjjuQM0B.mjs → app-CRd39JJ8.mjs} +4 -4
- package/dist/{app-BjjuQM0B.mjs.map → app-CRd39JJ8.mjs.map} +1 -1
- package/dist/{artifact-server-Dxz5YbuQ.mjs → artifact-server-CP6LXQ9d.mjs} +2 -2
- package/dist/{artifact-server-Dxz5YbuQ.mjs.map → artifact-server-CP6LXQ9d.mjs.map} +1 -1
- package/dist/{artifact-server-DoxJ7fCx.cjs → artifact-server-XbN16DwU.cjs} +1 -2
- package/dist/{call-args-Lk_wOJxd.mjs → call-args-DPXdX3_D.mjs} +1 -1
- package/dist/{call-args-Lk_wOJxd.mjs.map → call-args-DPXdX3_D.mjs.map} +1 -1
- package/dist/{capabilities-DliMBim-.mjs → capabilities-BShqspb-.mjs} +2 -2
- package/dist/{capabilities-DliMBim-.mjs.map → capabilities-BShqspb-.mjs.map} +1 -1
- package/dist/{capabilities-CB97WMA5.cjs → capabilities-Bm0JDbV7.cjs} +1 -1
- package/dist/cases-c0iV-XLI.cjs +9 -0
- package/dist/cases-qjPtbnUd.mjs +6 -0
- package/dist/cli.cjs +105 -64
- package/dist/cli.mjs +104 -63
- package/dist/cli.mjs.map +1 -1
- package/dist/{client-D4Bq0rp9.mjs → client-D4_hd4AP.mjs} +23 -9
- package/dist/client-D4_hd4AP.mjs.map +1 -0
- package/dist/{client-D4fZgIaO.cjs → client-DPc2eyVN.cjs} +27 -7
- package/dist/config-BwVx19Og.cjs +100 -0
- package/dist/config-Drgc2HuF.mjs +77 -0
- package/dist/config-Drgc2HuF.mjs.map +1 -0
- package/dist/{dossier-BsroDgD3.mjs → dossier-Bl0NkJKC.mjs} +3 -3
- package/dist/{dossier-BsroDgD3.mjs.map → dossier-Bl0NkJKC.mjs.map} +1 -1
- package/dist/{dossier-DtxREpPm.cjs → dossier-Br62hCG7.cjs} +3 -3
- package/dist/{evidence-BGcdKxuV.cjs → evidence-CvEesemA.cjs} +3 -3
- package/dist/{evidence-BhvFW-y_.mjs → evidence-D96PTzOQ.mjs} +3 -3
- package/dist/{evidence-BhvFW-y_.mjs.map → evidence-D96PTzOQ.mjs.map} +1 -1
- package/dist/{format-Ce1RObVl.mjs → format-Bq94jSyw.mjs} +1 -1
- package/dist/{format-Ce1RObVl.mjs.map → format-Bq94jSyw.mjs.map} +1 -1
- package/dist/{frontmatter-D8wWCeOa.mjs → frontmatter-D0ccQnUM.mjs} +1 -1
- package/dist/frontmatter-D0ccQnUM.mjs.map +1 -0
- package/dist/{graph-normalizer-Cv9yK9Pg.mjs → graph-normalizer-CXP06jKh.mjs} +1 -1
- package/dist/{graph-normalizer-Cv9yK9Pg.mjs.map → graph-normalizer-CXP06jKh.mjs.map} +1 -1
- package/dist/{graph-reports-DU05YCei.cjs → graph-reports-B3mkLP8Z.cjs} +3 -3
- package/dist/{graph-reports-C4TBjCkM.mjs → graph-reports-BDELxmpi.mjs} +3 -3
- package/dist/{graph-reports-C4TBjCkM.mjs.map → graph-reports-BDELxmpi.mjs.map} +1 -1
- package/dist/{html-generator-V6Bp0uRb.mjs → html-generator-AowOmzyi.mjs} +2 -2
- package/dist/{html-generator-V6Bp0uRb.mjs.map → html-generator-AowOmzyi.mjs.map} +1 -1
- package/dist/{html-generator-CAv81IWH.cjs → html-generator-Bx3UcLTB.cjs} +1 -1
- package/dist/index.cjs +8 -8
- package/dist/index.d.cts +3 -3
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +8 -8
- package/dist/{init-BufWeNP5.mjs → init-4tn7jfhN.mjs} +3 -2
- package/dist/init-4tn7jfhN.mjs.map +1 -0
- package/dist/{init-BxDVuX6v.cjs → init-TCQY5RDJ.cjs} +3 -2
- package/dist/mcp-endpoint-BaV8h_lq.cjs +60 -0
- package/dist/mcp-endpoint-DHs1cRFH.mjs +39 -0
- package/dist/mcp-endpoint-DHs1cRFH.mjs.map +1 -0
- package/dist/mcp-proxy.cjs +166 -30
- package/dist/mcp-proxy.d.cts.map +1 -1
- package/dist/mcp-proxy.d.mts.map +1 -1
- package/dist/mcp-proxy.mjs +165 -29
- package/dist/mcp-proxy.mjs.map +1 -1
- package/dist/{output-root-CmWM7aV2.mjs → output-root-BRhzhhXZ.mjs} +3 -3
- package/dist/{output-root-CmWM7aV2.mjs.map → output-root-BRhzhhXZ.mjs.map} +1 -1
- package/dist/{output-root-CFYms3ad.cjs → output-root-YIbl6PwF.cjs} +2 -2
- package/dist/{parser-BUIWW1OH.cjs → parser-BXLAHYnZ.cjs} +1 -1
- package/dist/{parser-DO0_SssG.mjs → parser-CJfMsOl6.mjs} +1 -1
- package/dist/{parser-DO0_SssG.mjs.map → parser-CJfMsOl6.mjs.map} +1 -1
- package/dist/{public-tools-D4UI-Zb0.mjs → public-tools-B13J0MJZ.mjs} +471 -76
- package/dist/public-tools-B13J0MJZ.mjs.map +1 -0
- package/dist/{public-tools-XSpkz2ky.cjs → public-tools-BC1fi0DV.cjs} +471 -75
- package/dist/{resolver-zYbu4wDV.cjs → resolver-BUU7ZgW-.cjs} +1 -1
- package/dist/{resolver-C2ZS7oC8.mjs → resolver-D7VBb0uB.mjs} +1 -1
- package/dist/resolver-D7VBb0uB.mjs.map +1 -0
- package/dist/{runner-BhUHbiHG.mjs → runner-DIs04IhN.mjs} +7 -7
- package/dist/{runner-BhUHbiHG.mjs.map → runner-DIs04IhN.mjs.map} +1 -1
- package/dist/{runner-1Eq55OYb.cjs → runner-ZYowxCVl.cjs} +6 -7
- package/dist/schema-BFEWhzg7.mjs +60 -0
- package/dist/schema-BFEWhzg7.mjs.map +1 -0
- package/dist/{schema-4XpzDFQM.cjs → schema-Vl9yuOFO.cjs} +32 -9
- package/dist/{schema-cache-CgWRCN2N.cjs → schema-cache-CJk1EL3L.cjs} +1 -1
- package/dist/{schema-cache-9CksD7tX.mjs → schema-cache-DwDvPy4e.mjs} +1 -1
- package/dist/{schema-cache-9CksD7tX.mjs.map → schema-cache-DwDvPy4e.mjs.map} +1 -1
- package/dist/{selector-xjm6NTHI.mjs → selector-CTUiQrzI.mjs} +2 -2
- package/dist/{selector-xjm6NTHI.mjs.map → selector-CTUiQrzI.mjs.map} +1 -1
- package/dist/{selector-CkFcTXzz.cjs → selector-DBS2jYH4.cjs} +1 -1
- package/dist/{server-BkM5xrXb.mjs → server-BXLX2j_A.mjs} +3 -3
- package/dist/{server-BkM5xrXb.mjs.map → server-BXLX2j_A.mjs.map} +1 -1
- package/dist/{server-DXowbpfi.cjs → server-BqVdWath.cjs} +2 -2
- package/dist/{session-CcTgYxsj.mjs → session-Bha3zFrx.mjs} +3 -3
- package/dist/{session-CcTgYxsj.mjs.map → session-Bha3zFrx.mjs.map} +1 -1
- package/dist/{session-BpNylyuJ.cjs → session-DwyikazY.cjs} +3 -3
- package/dist/{setup-DOpKPrlx.cjs → setup-CDha4B9s.cjs} +1 -1
- package/dist/{setup-DyrWHuwQ.mjs → setup-yXK8agdn.mjs} +1 -1
- package/dist/{setup-DyrWHuwQ.mjs.map → setup-yXK8agdn.mjs.map} +1 -1
- package/dist/{store-BoWE-Gtl.mjs → store-BT2SCcQr.mjs} +5 -5
- package/dist/{store-BoWE-Gtl.mjs.map → store-BT2SCcQr.mjs.map} +1 -1
- package/dist/{store-BiUhQOIf.cjs → store-DogLawSj.cjs} +5 -5
- package/dist/{tool-visibility-3Z_KvO9Q.mjs → tool-visibility-BHRFLXuU.mjs} +2 -2
- package/dist/{tool-visibility-3Z_KvO9Q.mjs.map → tool-visibility-BHRFLXuU.mjs.map} +1 -1
- package/dist/{tool-visibility-CwgY205r.cjs → tool-visibility-iAVQV3t0.cjs} +1 -1
- package/dist/{tools-f_vJUZAF.cjs → tools-DY8h0WbE.cjs} +2 -2
- package/dist/{tools-Cp2jAAAb.mjs → tools-Py6SXg6J.mjs} +3 -3
- package/dist/{tools-Cp2jAAAb.mjs.map → tools-Py6SXg6J.mjs.map} +1 -1
- package/dist/{topup-server-DUjyFftI.mjs → topup-server-BJgVw6Jt.mjs} +104 -46
- package/dist/topup-server-BJgVw6Jt.mjs.map +1 -0
- package/dist/{topup-server-BZuQifvh.cjs → topup-server-yAaXYkJP.cjs} +102 -44
- package/dist/{version-1gP19Lhi.mjs → version-BA3J8hu4.mjs} +1 -1
- package/dist/{version-1gP19Lhi.mjs.map → version-BA3J8hu4.mjs.map} +1 -1
- package/dist/{version-BNGtdpmH.cjs → version-CO9Or_YV.cjs} +0 -1
- package/dist/{data-extractor-BNGj7ECT.cjs → viz-Da9YWN_I.cjs} +37 -8
- package/dist/{data-extractor-DFzsa5CS.mjs → viz-DkJyqlUu.mjs} +35 -6
- package/dist/viz-DkJyqlUu.mjs.map +1 -0
- package/dist/{wallet-BMelXBYP.mjs → wallet-D8IqFRKY.mjs} +2 -2
- package/dist/{wallet-BMelXBYP.mjs.map → wallet-D8IqFRKY.mjs.map} +1 -1
- package/dist/{wallet-RnvvSpV2.cjs → wallet-TAlNMvIM.cjs} +1 -1
- package/docs/contributing.md +1 -0
- package/docs/debugging.md +10 -14
- package/docs/graph-tools.md +60 -2
- package/docs/mcp-proxy.md +3 -0
- package/package.json +3 -3
- package/skills/chain-insights-developer-experience/SKILL.md +4 -2
- package/skills/chain-insights-investigation/SKILL.md +1 -1
- package/skills/test-chain-insights-graphrag-mcp/SKILL.md +4 -5
- package/skills/test-chain-insights-graphrag-mcp/scripts/run-uat.sh +5 -24
- package/dist/cases-By7INiOa.mjs +0 -6
- package/dist/cases-CDcNU91B.cjs +0 -9
- package/dist/client-D4Bq0rp9.mjs.map +0 -1
- package/dist/config-Bmdl5hdk.cjs +0 -67
- package/dist/config-BwrBYmiC.mjs +0 -44
- package/dist/config-BwrBYmiC.mjs.map +0 -1
- package/dist/data-extractor-DFzsa5CS.mjs.map +0 -1
- package/dist/frontmatter-D8wWCeOa.mjs.map +0 -1
- package/dist/init-BufWeNP5.mjs.map +0 -1
- package/dist/public-tools-D4UI-Zb0.mjs.map +0 -1
- package/dist/resolver-C2ZS7oC8.mjs.map +0 -1
- package/dist/schema-8d0rVIdZ.mjs +0 -37
- package/dist/schema-8d0rVIdZ.mjs.map +0 -1
- package/dist/topup-server-DUjyFftI.mjs.map +0 -1
- package/dist/viz-BlCJe6Tk.mjs +0 -35
- package/dist/viz-BlCJe6Tk.mjs.map +0 -1
- package/dist/viz-ClezVXrJ.cjs +0 -44
- /package/dist/{call-args-DQA2QcRA.cjs → call-args-CcUV6gFS.cjs} +0 -0
- /package/dist/{chunk-CZWwpsFl.cjs → chunk-DakpK96I.cjs} +0 -0
- /package/dist/{format-DOrPvXEr.cjs → format-9NLBykEL.cjs} +0 -0
- /package/dist/{frontmatter-DgAuai7E.cjs → frontmatter-Dvqa5HX6.cjs} +0 -0
- /package/dist/{graph-normalizer-DeIj6Ses.cjs → graph-normalizer-DbjlbMpz.cjs} +0 -0
- /package/dist/{rolldown-runtime-wcPFST8Q.mjs → rolldown-runtime-D7D4PA-g.mjs} +0 -0
package/dist/cli.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const require_chunk = require("./chunk-
|
|
2
|
-
const require_version = require("./version-
|
|
1
|
+
const require_chunk = require("./chunk-DakpK96I.cjs");
|
|
2
|
+
const require_version = require("./version-CO9Or_YV.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");
|
|
@@ -26,16 +26,16 @@ if (rawArgs[0] === "mcp" && rawArgs[1] === "trace-funds") {
|
|
|
26
26
|
process.exit(1);
|
|
27
27
|
}
|
|
28
28
|
async function resolveCaseSelector(input) {
|
|
29
|
-
const { resolveCaseSelector } = await Promise.resolve().then(() => require("./selector-
|
|
29
|
+
const { resolveCaseSelector } = await Promise.resolve().then(() => require("./selector-DBS2jYH4.cjs"));
|
|
30
30
|
return resolveCaseSelector(input);
|
|
31
31
|
}
|
|
32
32
|
async function scopeCasesToInvocationDir() {
|
|
33
33
|
if (process.env["CHAIN_INSIGHTS_CASES_ROOT"]?.trim()) return;
|
|
34
|
-
const { activeCasesRoot } = await Promise.resolve().then(() => require("./active-
|
|
34
|
+
const { activeCasesRoot } = await Promise.resolve().then(() => require("./active-BVr55kvW.cjs")).then((n) => n.active_exports);
|
|
35
35
|
process.env["CHAIN_INSIGHTS_CASES_ROOT"] = activeCasesRoot();
|
|
36
36
|
}
|
|
37
37
|
async function showCaseContext(caseSelector) {
|
|
38
|
-
const { CaseStore } = await Promise.resolve().then(() => require("./cases-
|
|
38
|
+
const { CaseStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
|
|
39
39
|
const caseId = await resolveCaseSelector(caseSelector);
|
|
40
40
|
const ctx = await CaseStore.loadContext(caseId);
|
|
41
41
|
console.log(`\n=== Case: ${ctx.case.id} ===`);
|
|
@@ -71,9 +71,9 @@ function optionalScamTopologyActivityPolicy(value) {
|
|
|
71
71
|
throw new Error("activity_policy must be one of: node_relative_only, global_incident_only");
|
|
72
72
|
}
|
|
73
73
|
async function withGraphMcpClient(name, fn) {
|
|
74
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
74
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-BwVx19Og.cjs")).then((n) => n.config_exports);
|
|
75
75
|
const config = await loadConfig();
|
|
76
|
-
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-
|
|
76
|
+
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-DPc2eyVN.cjs")).then((n) => n.client_exports);
|
|
77
77
|
const paymentFetch = await createConfiguredGraphMcpFetch(config);
|
|
78
78
|
const { Client } = await import("@modelcontextprotocol/sdk/client/index.js");
|
|
79
79
|
const { StreamableHTTPClientTransport } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
@@ -92,8 +92,8 @@ function printMcpTextContent(result) {
|
|
|
92
92
|
for (const item of result.content ?? []) if (item.type === "text") console.log(item.text);
|
|
93
93
|
}
|
|
94
94
|
async function printNetworkCapabilities(opts) {
|
|
95
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
96
|
-
const { fetchNetworkCapabilities, formatNetworkCapabilities } = await Promise.resolve().then(() => require("./capabilities-
|
|
95
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-BwVx19Og.cjs")).then((n) => n.config_exports);
|
|
96
|
+
const { fetchNetworkCapabilities, formatNetworkCapabilities } = await Promise.resolve().then(() => require("./capabilities-Bm0JDbV7.cjs"));
|
|
97
97
|
const document = await fetchNetworkCapabilities(await loadConfig());
|
|
98
98
|
if (opts.json) console.log(JSON.stringify(document, null, 2));
|
|
99
99
|
else console.log(formatNetworkCapabilities(document));
|
|
@@ -108,9 +108,9 @@ program.command("networks").alias("network").description("List supported graph n
|
|
|
108
108
|
});
|
|
109
109
|
program.command("serve").description("Start local visualization server").option("-p, --port <number>", "Port to bind (default: 4321)", "4321").action(async (opts) => {
|
|
110
110
|
try {
|
|
111
|
-
const { requireWorkspaceRoot } = await Promise.resolve().then(() => require("./output-root-
|
|
111
|
+
const { requireWorkspaceRoot } = await Promise.resolve().then(() => require("./output-root-YIbl6PwF.cjs")).then((n) => n.output_root_exports);
|
|
112
112
|
const workspaceRoot = requireWorkspaceRoot();
|
|
113
|
-
const { startServer } = await Promise.resolve().then(() => require("./server-
|
|
113
|
+
const { startServer } = await Promise.resolve().then(() => require("./server-BqVdWath.cjs")).then((n) => n.server_exports);
|
|
114
114
|
console.log(`Workspace: ${workspaceRoot}`);
|
|
115
115
|
startServer(parseInt(opts.port, 10));
|
|
116
116
|
} catch (err) {
|
|
@@ -119,8 +119,8 @@ program.command("serve").description("Start local visualization server").option(
|
|
|
119
119
|
}
|
|
120
120
|
});
|
|
121
121
|
program.command("status").description("Show toolkit status and configuration").action(async () => {
|
|
122
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
123
|
-
const { findActiveWorkspace, activeDataDir } = await Promise.resolve().then(() => require("./active-
|
|
122
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-BwVx19Og.cjs")).then((n) => n.config_exports);
|
|
123
|
+
const { findActiveWorkspace, activeDataDir } = await Promise.resolve().then(() => require("./active-BVr55kvW.cjs")).then((n) => n.active_exports);
|
|
124
124
|
const config = await loadConfig();
|
|
125
125
|
const workspace = findActiveWorkspace();
|
|
126
126
|
const graphMcpStatus = config.graphMcpMode === "debug" && config.graphMcpAuthToken?.trim() ? "bearer access mode" : `${config.graphMcpMode} mode`;
|
|
@@ -132,7 +132,7 @@ program.command("status").description("Show toolkit status and configuration").a
|
|
|
132
132
|
});
|
|
133
133
|
program.command("debug").description("Configure Graph MCP debug mode").addCommand(new commander.Command("on").description("Enable Graph MCP debug mode without x402 payments").requiredOption("--token <token>", "Debug bearer token").option("--endpoint <url>", "Graph MCP endpoint").action(async (opts) => {
|
|
134
134
|
try {
|
|
135
|
-
const { saveConfig } = await Promise.resolve().then(() => require("./config-
|
|
135
|
+
const { saveConfig } = await Promise.resolve().then(() => require("./config-BwVx19Og.cjs")).then((n) => n.config_exports);
|
|
136
136
|
await saveConfig({
|
|
137
137
|
graphMcpMode: "debug",
|
|
138
138
|
graphMcpAuthToken: opts.token,
|
|
@@ -147,7 +147,7 @@ program.command("debug").description("Configure Graph MCP debug mode").addComman
|
|
|
147
147
|
}
|
|
148
148
|
})).addCommand(new commander.Command("off").description("Disable Graph MCP debug mode and use paid x402 calls").action(async () => {
|
|
149
149
|
try {
|
|
150
|
-
const { saveConfig } = await Promise.resolve().then(() => require("./config-
|
|
150
|
+
const { saveConfig } = await Promise.resolve().then(() => require("./config-BwVx19Og.cjs")).then((n) => n.config_exports);
|
|
151
151
|
await saveConfig({
|
|
152
152
|
graphMcpMode: "paid",
|
|
153
153
|
graphMcpAuthToken: ""
|
|
@@ -160,7 +160,7 @@ program.command("debug").description("Configure Graph MCP debug mode").addComman
|
|
|
160
160
|
}
|
|
161
161
|
})).addCommand(new commander.Command("status").description("Show Graph MCP payment/debug mode").action(async () => {
|
|
162
162
|
try {
|
|
163
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
163
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-BwVx19Og.cjs")).then((n) => n.config_exports);
|
|
164
164
|
const config = await loadConfig();
|
|
165
165
|
console.log(`Graph MCP mode: ${config.graphMcpMode}`);
|
|
166
166
|
console.log(`Graph endpoint: ${config.graphMcpEndpoint}`);
|
|
@@ -175,7 +175,7 @@ program.command("access-key").description("Configure Graph MCP test access key m
|
|
|
175
175
|
try {
|
|
176
176
|
const normalizedKey = key.trim();
|
|
177
177
|
if (!normalizedKey) throw new Error("Test access key is required");
|
|
178
|
-
const { saveConfig } = await Promise.resolve().then(() => require("./config-
|
|
178
|
+
const { saveConfig } = await Promise.resolve().then(() => require("./config-BwVx19Og.cjs")).then((n) => n.config_exports);
|
|
179
179
|
await saveConfig({
|
|
180
180
|
graphMcpMode: "debug",
|
|
181
181
|
graphMcpAuthToken: normalizedKey,
|
|
@@ -190,7 +190,7 @@ program.command("access-key").description("Configure Graph MCP test access key m
|
|
|
190
190
|
}
|
|
191
191
|
})).addCommand(new commander.Command("clear").description("Remove the Graph MCP test access key and use paid x402 calls").action(async () => {
|
|
192
192
|
try {
|
|
193
|
-
const { saveConfig } = await Promise.resolve().then(() => require("./config-
|
|
193
|
+
const { saveConfig } = await Promise.resolve().then(() => require("./config-BwVx19Og.cjs")).then((n) => n.config_exports);
|
|
194
194
|
await saveConfig({
|
|
195
195
|
graphMcpMode: "paid",
|
|
196
196
|
graphMcpAuthToken: ""
|
|
@@ -203,7 +203,7 @@ program.command("access-key").description("Configure Graph MCP test access key m
|
|
|
203
203
|
}
|
|
204
204
|
})).addCommand(new commander.Command("status").description("Show Graph MCP test access key status").action(async () => {
|
|
205
205
|
try {
|
|
206
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
206
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-BwVx19Og.cjs")).then((n) => n.config_exports);
|
|
207
207
|
const config = await loadConfig();
|
|
208
208
|
console.log(`Graph endpoint: ${config.graphMcpEndpoint}`);
|
|
209
209
|
console.log(`Access key: ${config.graphMcpAuthToken?.trim() ? "configured" : "not configured"}`);
|
|
@@ -215,7 +215,7 @@ program.command("access-key").description("Configure Graph MCP test access key m
|
|
|
215
215
|
}));
|
|
216
216
|
program.command("init").description("Initialize an investigation workspace").argument("[dir]", "Workspace directory to initialize", ".").option("--force", "Overwrite existing workspace files").action(async (dir, opts) => {
|
|
217
217
|
try {
|
|
218
|
-
const { initWorkspace } = await Promise.resolve().then(() => require("./init-
|
|
218
|
+
const { initWorkspace } = await Promise.resolve().then(() => require("./init-TCQY5RDJ.cjs"));
|
|
219
219
|
const result = await initWorkspace({
|
|
220
220
|
targetDir: dir,
|
|
221
221
|
force: opts.force
|
|
@@ -229,7 +229,7 @@ program.command("init").description("Initialize an investigation workspace").arg
|
|
|
229
229
|
});
|
|
230
230
|
program.command("setup").description("Configure external MCP clients").addCommand(new commander.Command("claude-desktop").alias("claude").description("Install or update the Claude Desktop MCP server entry").option("--config <path>", "Path to claude_desktop_config.json").option("--dry-run", "Print the intended change without writing files").action(async (opts) => {
|
|
231
231
|
try {
|
|
232
|
-
const { setupClaudeDesktop } = await Promise.resolve().then(() => require("./setup-
|
|
232
|
+
const { setupClaudeDesktop } = await Promise.resolve().then(() => require("./setup-CDha4B9s.cjs"));
|
|
233
233
|
const result = await setupClaudeDesktop({
|
|
234
234
|
configPath: opts.config,
|
|
235
235
|
dryRun: opts.dryRun
|
|
@@ -250,8 +250,8 @@ program.command("setup").description("Configure external MCP clients").addComman
|
|
|
250
250
|
}
|
|
251
251
|
}));
|
|
252
252
|
program.command("config").description("Read or write configuration values").addCommand(new commander.Command("get").argument("<key>", "Config key to read").action(async (key) => {
|
|
253
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
254
|
-
const { CONFIG_KEYS } = await Promise.resolve().then(() => require("./schema-
|
|
253
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-BwVx19Og.cjs")).then((n) => n.config_exports);
|
|
254
|
+
const { CONFIG_KEYS } = await Promise.resolve().then(() => require("./schema-Vl9yuOFO.cjs")).then((n) => n.schema_exports);
|
|
255
255
|
if (!CONFIG_KEYS.includes(key)) {
|
|
256
256
|
console.error(`Unknown config key: ${key}`);
|
|
257
257
|
process.exit(1);
|
|
@@ -261,7 +261,7 @@ program.command("config").description("Read or write configuration values").addC
|
|
|
261
261
|
})).addCommand(new commander.Command("set").argument("<key>", "Config key to write").argument("<value>", "Value to set").action(async (key, value) => {
|
|
262
262
|
if (key === "walletPrivateKey") {
|
|
263
263
|
try {
|
|
264
|
-
const { setWalletPrivateKey } = await Promise.resolve().then(() => require("./wallet-
|
|
264
|
+
const { setWalletPrivateKey } = await Promise.resolve().then(() => require("./wallet-TAlNMvIM.cjs")).then((n) => n.wallet_exports);
|
|
265
265
|
const address = await setWalletPrivateKey(value);
|
|
266
266
|
console.log("Wallet private key encrypted and stored in ~/.chain-insights/wallet.json");
|
|
267
267
|
console.log(`Wallet address: ${address}`);
|
|
@@ -271,8 +271,8 @@ program.command("config").description("Read or write configuration values").addC
|
|
|
271
271
|
}
|
|
272
272
|
return;
|
|
273
273
|
}
|
|
274
|
-
const { loadConfig, saveConfig } = await Promise.resolve().then(() => require("./config-
|
|
275
|
-
const { CONFIG_KEYS, DEFAULT_CONFIG } = await Promise.resolve().then(() => require("./schema-
|
|
274
|
+
const { loadConfig, saveConfig } = await Promise.resolve().then(() => require("./config-BwVx19Og.cjs")).then((n) => n.config_exports);
|
|
275
|
+
const { CONFIG_KEYS, DEFAULT_CONFIG } = await Promise.resolve().then(() => require("./schema-Vl9yuOFO.cjs")).then((n) => n.schema_exports);
|
|
276
276
|
const current = await loadConfig();
|
|
277
277
|
if (!CONFIG_KEYS.includes(key)) {
|
|
278
278
|
console.error(`Unknown config key: ${key}`);
|
|
@@ -287,7 +287,7 @@ program.command("config").description("Read or write configuration values").addC
|
|
|
287
287
|
}));
|
|
288
288
|
program.command("wallet").description("Manage the local Base USDC payment wallet").addCommand(new commander.Command("address").description("Print the local payment wallet address").action(async () => {
|
|
289
289
|
try {
|
|
290
|
-
const { getWalletAccount } = await Promise.resolve().then(() => require("./tools-
|
|
290
|
+
const { getWalletAccount } = await Promise.resolve().then(() => require("./tools-DY8h0WbE.cjs")).then((n) => n.tools_exports);
|
|
291
291
|
const account = await getWalletAccount();
|
|
292
292
|
console.log(account.address);
|
|
293
293
|
} catch (err) {
|
|
@@ -296,7 +296,7 @@ program.command("wallet").description("Manage the local Base USDC payment wallet
|
|
|
296
296
|
}
|
|
297
297
|
})).addCommand(new commander.Command("balance").description("Show the local payment wallet Base USDC balance").action(async () => {
|
|
298
298
|
try {
|
|
299
|
-
const { getWalletBalanceText } = await Promise.resolve().then(() => require("./tools-
|
|
299
|
+
const { getWalletBalanceText } = await Promise.resolve().then(() => require("./tools-DY8h0WbE.cjs")).then((n) => n.tools_exports);
|
|
300
300
|
console.log(await getWalletBalanceText());
|
|
301
301
|
} catch (err) {
|
|
302
302
|
console.error(err.message);
|
|
@@ -304,8 +304,8 @@ program.command("wallet").description("Manage the local Base USDC payment wallet
|
|
|
304
304
|
}
|
|
305
305
|
})).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) => {
|
|
306
306
|
try {
|
|
307
|
-
const { buildTopupInfo, getWalletAccount } = await Promise.resolve().then(() => require("./tools-
|
|
308
|
-
const { startTopupServer } = await Promise.resolve().then(() => require("./topup-server-
|
|
307
|
+
const { buildTopupInfo, getWalletAccount } = await Promise.resolve().then(() => require("./tools-DY8h0WbE.cjs")).then((n) => n.tools_exports);
|
|
308
|
+
const { startTopupServer } = await Promise.resolve().then(() => require("./topup-server-yAaXYkJP.cjs")).then((n) => n.topup_server_exports);
|
|
309
309
|
const account = await getWalletAccount();
|
|
310
310
|
const url = await startTopupServer(account);
|
|
311
311
|
const info = buildTopupInfo(account.address, url);
|
|
@@ -335,11 +335,11 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
335
335
|
}
|
|
336
336
|
})).addCommand(new commander.Command("tools").description("List available MCP tools (cached 24h)").option("--refresh", "Force refresh schema cache").action(async (opts) => {
|
|
337
337
|
try {
|
|
338
|
-
const { loadSchema, saveSchema } = await Promise.resolve().then(() => require("./schema-cache-
|
|
339
|
-
const { formatToolsTable } = await Promise.resolve().then(() => require("./format-
|
|
340
|
-
const { visibleRemoteTools } = await Promise.resolve().then(() => require("./tool-visibility-
|
|
341
|
-
const { loadConfig } = await Promise.resolve().then(() => require("./config-
|
|
342
|
-
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-
|
|
338
|
+
const { loadSchema, saveSchema } = await Promise.resolve().then(() => require("./schema-cache-CJk1EL3L.cjs"));
|
|
339
|
+
const { formatToolsTable } = await Promise.resolve().then(() => require("./format-9NLBykEL.cjs"));
|
|
340
|
+
const { visibleRemoteTools } = await Promise.resolve().then(() => require("./tool-visibility-iAVQV3t0.cjs")).then((n) => n.tool_visibility_exports);
|
|
341
|
+
const { loadConfig } = await Promise.resolve().then(() => require("./config-BwVx19Og.cjs")).then((n) => n.config_exports);
|
|
342
|
+
const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-DPc2eyVN.cjs")).then((n) => n.client_exports);
|
|
343
343
|
const config = await loadConfig();
|
|
344
344
|
const graphMcpEndpoint = resolveGraphMcpEndpoint(config);
|
|
345
345
|
let tools = opts.refresh ? null : await loadSchema(graphMcpEndpoint);
|
|
@@ -378,7 +378,7 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
378
378
|
}));
|
|
379
379
|
return;
|
|
380
380
|
}
|
|
381
|
-
const { addressRisk } = await Promise.resolve().then(() => require("./public-tools-
|
|
381
|
+
const { addressRisk } = await Promise.resolve().then(() => require("./public-tools-BC1fi0DV.cjs"));
|
|
382
382
|
const result = await addressRisk(client, {
|
|
383
383
|
address: opts.address,
|
|
384
384
|
network: opts.network,
|
|
@@ -392,7 +392,7 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
392
392
|
}
|
|
393
393
|
})).addCommand(new commander.Command("track-funds").description("Trace trusted/victim addresses and optional known untrusted/scammer addresses").requiredOption("--trusted-addresses <addresses>", "Comma-separated full trusted/victim addresses, max 5").requiredOption("--network <network>", "Network to query. Run `cia mcp networks` for supported networks.").option("--untrusted-addresses <addresses>", "Comma-separated full known untrusted/scammer addresses, max 5").option("--case <id>", "Case ID to attach compact evidence pointers").option("--max-hops <number>", "Maximum trace hops, 1-5").option("--per-address-limit <number>", "Maximum exchange paths/results per address, 1-10").option("--min-amount-sum <number>", "Minimum r.amount_sum for traced edges").option("--remote", "Force remote MCP tool call instead of local Chain Insights recipe").action(async (opts) => {
|
|
394
394
|
try {
|
|
395
|
-
const { requireWorkspaceRoot } = await Promise.resolve().then(() => require("./output-root-
|
|
395
|
+
const { requireWorkspaceRoot } = await Promise.resolve().then(() => require("./output-root-YIbl6PwF.cjs")).then((n) => n.output_root_exports);
|
|
396
396
|
requireWorkspaceRoot();
|
|
397
397
|
await withGraphMcpClient("chain-insights-cli-track-funds", async (client, config) => {
|
|
398
398
|
if (opts.remote) {
|
|
@@ -406,7 +406,7 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
406
406
|
}));
|
|
407
407
|
return;
|
|
408
408
|
}
|
|
409
|
-
const { trackFunds } = await Promise.resolve().then(() => require("./public-tools-
|
|
409
|
+
const { trackFunds } = await Promise.resolve().then(() => require("./public-tools-BC1fi0DV.cjs"));
|
|
410
410
|
const caseId = opts.case ? await resolveCaseSelector(opts.case) : void 0;
|
|
411
411
|
const result = await trackFunds(client, config, {
|
|
412
412
|
trustedAddresses: opts.trustedAddresses,
|
|
@@ -426,10 +426,10 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
426
426
|
}
|
|
427
427
|
})).addCommand(new commander.Command("scam-topology").description("Build victim-incident scam topology and ML-ready scam labels").requiredOption("--network <network>", "Network to query. Run `cia mcp networks` for supported networks.").requiredOption("--victim-address <address>", "Full victim/source address that anchors the incident").requiredOption("--incident-timestamp-ms <milliseconds>", "Earliest known incident transfer timestamp in milliseconds").option("--max-hops <number>", "Maximum trace hops, default 16, max 64").option("--activity-policy <mode>", "Traversal activity policy: node_relative_only or global_incident_only", "node_relative_only").option("--case <id>", "Case ID to attach compact evidence pointers").action(async (opts) => {
|
|
428
428
|
try {
|
|
429
|
-
const { requireWorkspaceRoot } = await Promise.resolve().then(() => require("./output-root-
|
|
429
|
+
const { requireWorkspaceRoot } = await Promise.resolve().then(() => require("./output-root-YIbl6PwF.cjs")).then((n) => n.output_root_exports);
|
|
430
430
|
requireWorkspaceRoot();
|
|
431
431
|
await withGraphMcpClient("chain-insights-cli-scam-topology", async (client, config) => {
|
|
432
|
-
const { scamTopology } = await Promise.resolve().then(() => require("./public-tools-
|
|
432
|
+
const { scamTopology } = await Promise.resolve().then(() => require("./public-tools-BC1fi0DV.cjs"));
|
|
433
433
|
const incidentTimestampMs = optionalNumber(opts.incidentTimestampMs);
|
|
434
434
|
if (incidentTimestampMs === void 0) throw new Error("incident-timestamp-ms is required");
|
|
435
435
|
const caseId = opts.case ? await resolveCaseSelector(opts.case) : void 0;
|
|
@@ -448,15 +448,38 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
448
448
|
console.error(err.message);
|
|
449
449
|
process.exit(1);
|
|
450
450
|
}
|
|
451
|
+
})).addCommand(new commander.Command("stake-insights").description("Explain Bittensor staking behavior around an address, coldkey, or hotkey").requiredOption("--network <network>", "Network to query. Run `cia mcp networks` for supported networks.").option("--address <address>", "Full Bittensor address to inspect as either coldkey or hotkey").option("--coldkey <address>", "Full Bittensor coldkey address to inspect").option("--hotkey <address>", "Full Bittensor hotkey address to inspect").option("--netuid <number>", "Optional subnet netuid filter").option("--start-timestamp-ms <milliseconds>", "Optional inclusive lower activity timestamp bound").option("--end-timestamp-ms <milliseconds>", "Optional inclusive upper activity timestamp bound").option("--start-block <number>", "Optional start block. Current stake graph parity may require timestamp windows instead.").option("--end-block <number>", "Optional end block. Current stake graph parity may require timestamp windows instead.").option("--depth <number>", "Optional expansion depth limit, default 1, max 3").action(async (opts) => {
|
|
452
|
+
try {
|
|
453
|
+
await withGraphMcpClient("chain-insights-cli-stake-insights", async (client) => {
|
|
454
|
+
const { stakeInsights } = await Promise.resolve().then(() => require("./public-tools-BC1fi0DV.cjs"));
|
|
455
|
+
const result = await stakeInsights(client, {
|
|
456
|
+
network: opts.network,
|
|
457
|
+
address: opts.address,
|
|
458
|
+
coldkey: opts.coldkey,
|
|
459
|
+
hotkey: opts.hotkey,
|
|
460
|
+
netuid: optionalNumber(opts.netuid),
|
|
461
|
+
startTimestampMs: optionalNumber(opts.startTimestampMs),
|
|
462
|
+
endTimestampMs: optionalNumber(opts.endTimestampMs),
|
|
463
|
+
startBlock: optionalNumber(opts.startBlock),
|
|
464
|
+
endBlock: optionalNumber(opts.endBlock),
|
|
465
|
+
depth: optionalNumber(opts.depth)
|
|
466
|
+
});
|
|
467
|
+
console.log(result.summaryText);
|
|
468
|
+
console.log(JSON.stringify(result.structuredContent, null, 2));
|
|
469
|
+
});
|
|
470
|
+
} catch (err) {
|
|
471
|
+
console.error(err.message);
|
|
472
|
+
process.exit(1);
|
|
473
|
+
}
|
|
451
474
|
})).addCommand(new commander.Command("call").description("Call an MCP tool directly (debug)").argument("<tool>", "Tool name to call").argument("[args...]", "Key=value arguments (e.g. address=0x1234 chain=ethereum)").action(async (tool, rawArgs) => {
|
|
452
475
|
try {
|
|
453
|
-
const { parseMcpCallArgs } = await Promise.resolve().then(() => require("./call-args-
|
|
454
|
-
const { assertPublicMcpToolName } = await Promise.resolve().then(() => require("./tool-visibility-
|
|
476
|
+
const { parseMcpCallArgs } = await Promise.resolve().then(() => require("./call-args-CcUV6gFS.cjs"));
|
|
477
|
+
const { assertPublicMcpToolName } = await Promise.resolve().then(() => require("./tool-visibility-iAVQV3t0.cjs")).then((n) => n.tool_visibility_exports);
|
|
455
478
|
const args = parseMcpCallArgs(rawArgs);
|
|
456
479
|
assertPublicMcpToolName(tool);
|
|
457
480
|
await withGraphMcpClient("chain-insights-cli-call", async (client, config) => {
|
|
458
481
|
if (tool === "address_risk") {
|
|
459
|
-
const { addressRisk } = await Promise.resolve().then(() => require("./public-tools-
|
|
482
|
+
const { addressRisk } = await Promise.resolve().then(() => require("./public-tools-BC1fi0DV.cjs"));
|
|
460
483
|
const result = await addressRisk(client, {
|
|
461
484
|
address: String(args["address"] ?? ""),
|
|
462
485
|
network: String(args["network"] ?? ""),
|
|
@@ -466,7 +489,7 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
466
489
|
return;
|
|
467
490
|
}
|
|
468
491
|
if (tool === "track_funds") {
|
|
469
|
-
const { trackFunds } = await Promise.resolve().then(() => require("./public-tools-
|
|
492
|
+
const { trackFunds } = await Promise.resolve().then(() => require("./public-tools-BC1fi0DV.cjs"));
|
|
470
493
|
const result = await trackFunds(client, config, {
|
|
471
494
|
trustedAddresses: args["trusted_addresses"] ?? "",
|
|
472
495
|
untrustedAddresses: args["untrusted_addresses"],
|
|
@@ -481,7 +504,7 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
481
504
|
return;
|
|
482
505
|
}
|
|
483
506
|
if (tool === "scam_topology") {
|
|
484
|
-
const { scamTopology } = await Promise.resolve().then(() => require("./public-tools-
|
|
507
|
+
const { scamTopology } = await Promise.resolve().then(() => require("./public-tools-BC1fi0DV.cjs"));
|
|
485
508
|
const victimAddress = String(args["victim_address"] ?? "").trim();
|
|
486
509
|
if (!victimAddress) throw new Error("victim_address is required");
|
|
487
510
|
const incidentTimestampMs = optionalNumberArg(args["incident_timestamp_ms"], "incident_timestamp_ms");
|
|
@@ -498,6 +521,24 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
|
|
|
498
521
|
console.log(JSON.stringify(result.structuredContent, null, 2));
|
|
499
522
|
return;
|
|
500
523
|
}
|
|
524
|
+
if (tool === "stake_insights") {
|
|
525
|
+
const { stakeInsights } = await Promise.resolve().then(() => require("./public-tools-BC1fi0DV.cjs"));
|
|
526
|
+
const result = await stakeInsights(client, {
|
|
527
|
+
network: String(args["network"] ?? ""),
|
|
528
|
+
address: args["address"] === void 0 ? void 0 : String(args["address"]),
|
|
529
|
+
coldkey: args["coldkey"] === void 0 ? void 0 : String(args["coldkey"]),
|
|
530
|
+
hotkey: args["hotkey"] === void 0 ? void 0 : String(args["hotkey"]),
|
|
531
|
+
netuid: optionalNumberArg(args["netuid"], "netuid"),
|
|
532
|
+
startTimestampMs: optionalNumberArg(args["start_timestamp_ms"], "start_timestamp_ms"),
|
|
533
|
+
endTimestampMs: optionalNumberArg(args["end_timestamp_ms"], "end_timestamp_ms"),
|
|
534
|
+
startBlock: optionalNumberArg(args["start_block"], "start_block"),
|
|
535
|
+
endBlock: optionalNumberArg(args["end_block"], "end_block"),
|
|
536
|
+
depth: optionalNumberArg(args["depth"] ?? args["max_hops"], "depth")
|
|
537
|
+
});
|
|
538
|
+
console.log(result.summaryText);
|
|
539
|
+
console.log(JSON.stringify(result.structuredContent, null, 2));
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
501
542
|
printMcpTextContent(await client.callTool({
|
|
502
543
|
name: tool,
|
|
503
544
|
arguments: args
|
|
@@ -513,14 +554,14 @@ const caseCommand = new commander.Command("case").description("Manage investigat
|
|
|
513
554
|
}).addCommand(new commander.Command("open").description("Open a new investigation case").argument("<name>", "Case name (e.g. \"Tornado Mixer Investigation\")").option("--tags <tags>", "Comma-separated tags (e.g. aml,mixer,defi)", "").option("--description <desc>", "Brief description of the investigation", "").action(async (name, opts) => {
|
|
514
555
|
try {
|
|
515
556
|
if (/^[1-9]\d*$/.test(name.trim())) throw new Error("Numeric case names look like list selectors. Use a descriptive case name, e.g. `cia case open \"Tracking stolen funds from <address>\"`.");
|
|
516
|
-
const { CaseStore } = await Promise.resolve().then(() => require("./cases-
|
|
557
|
+
const { CaseStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
|
|
517
558
|
const tags = opts.tags ? opts.tags.split(",").map((t) => t.trim()).filter(Boolean) : [];
|
|
518
559
|
const c = await CaseStore.create({
|
|
519
560
|
name,
|
|
520
561
|
tags,
|
|
521
562
|
description: opts.description
|
|
522
563
|
});
|
|
523
|
-
const { casesRoot } = await Promise.resolve().then(() => require("./store-
|
|
564
|
+
const { casesRoot } = await Promise.resolve().then(() => require("./store-DogLawSj.cjs"));
|
|
524
565
|
console.log(`Case opened: ${c.id}`);
|
|
525
566
|
console.log(`Directory: ${node_path.default.join(casesRoot(), c.id)}/`);
|
|
526
567
|
console.log(`Status: ${c.status}`);
|
|
@@ -530,7 +571,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
|
|
|
530
571
|
}
|
|
531
572
|
})).addCommand(new commander.Command("activate").description("Activate a case (set status to active)").argument("<case-id>", "Case ID to activate").action(async (caseSelector) => {
|
|
532
573
|
try {
|
|
533
|
-
const { CaseStore } = await Promise.resolve().then(() => require("./cases-
|
|
574
|
+
const { CaseStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
|
|
534
575
|
const caseId = await resolveCaseSelector(caseSelector);
|
|
535
576
|
const c = await CaseStore.setStatus(caseId, "active");
|
|
536
577
|
console.log(`Case ${c.id} is now: active`);
|
|
@@ -540,7 +581,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
|
|
|
540
581
|
}
|
|
541
582
|
})).addCommand(new commander.Command("suspend").description("Suspend a case (set status to suspended)").argument("<case-id>", "Case ID to suspend").action(async (caseSelector) => {
|
|
542
583
|
try {
|
|
543
|
-
const { CaseStore } = await Promise.resolve().then(() => require("./cases-
|
|
584
|
+
const { CaseStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
|
|
544
585
|
const caseId = await resolveCaseSelector(caseSelector);
|
|
545
586
|
const c = await CaseStore.setStatus(caseId, "suspended");
|
|
546
587
|
console.log(`Case ${c.id} is now: suspended`);
|
|
@@ -550,7 +591,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
|
|
|
550
591
|
}
|
|
551
592
|
})).addCommand(new commander.Command("close").description("Close a case permanently").argument("<case-id>", "Case ID to close").action(async (caseSelector) => {
|
|
552
593
|
try {
|
|
553
|
-
const { CaseStore } = await Promise.resolve().then(() => require("./cases-
|
|
594
|
+
const { CaseStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
|
|
554
595
|
const caseId = await resolveCaseSelector(caseSelector);
|
|
555
596
|
const c = await CaseStore.setStatus(caseId, "closed");
|
|
556
597
|
console.log(`Case ${c.id} is now: closed`);
|
|
@@ -560,7 +601,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
|
|
|
560
601
|
}
|
|
561
602
|
})).addCommand(new commander.Command("list").description("List all investigation cases").option("--status <status>", "Filter by status (open|active|suspended|closed)").action(async (opts) => {
|
|
562
603
|
try {
|
|
563
|
-
const { CaseStore } = await Promise.resolve().then(() => require("./cases-
|
|
604
|
+
const { CaseStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
|
|
564
605
|
const cases = await CaseStore.list();
|
|
565
606
|
const filtered = opts.status ? cases.filter((c) => c.status === opts.status) : cases;
|
|
566
607
|
if (filtered.length === 0) {
|
|
@@ -574,7 +615,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
|
|
|
574
615
|
}
|
|
575
616
|
})).addCommand(new commander.Command("evidence").description("Manage case evidence").addCommand(new commander.Command("add").description("Add evidence to a case from an MCP query result").argument("<case-id>", "Case ID to add evidence to").option("--source <tool>", "MCP tool name that produced this evidence", "manual").option("--content <text>", "Evidence content (MCP response or notes)", "").option("--query-params <params>", "Query parameters used (e.g. address=0x1234)", "").action(async (caseSelector, opts) => {
|
|
576
617
|
try {
|
|
577
|
-
const { EvidenceStore } = await Promise.resolve().then(() => require("./cases-
|
|
618
|
+
const { EvidenceStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
|
|
578
619
|
const caseId = await resolveCaseSelector(caseSelector);
|
|
579
620
|
const result = await EvidenceStore.append(caseId, {
|
|
580
621
|
source: opts.source,
|
|
@@ -589,7 +630,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
|
|
|
589
630
|
}
|
|
590
631
|
})).addCommand(new commander.Command("verify").description("Verify evidence manifest integrity for a case").argument("<case-id>", "Case ID to verify").action(async (caseSelector) => {
|
|
591
632
|
try {
|
|
592
|
-
const { EvidenceStore } = await Promise.resolve().then(() => require("./cases-
|
|
633
|
+
const { EvidenceStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
|
|
593
634
|
const caseId = await resolveCaseSelector(caseSelector);
|
|
594
635
|
const result = await EvidenceStore.verifyManifest(caseId);
|
|
595
636
|
if (result.ok) console.log(`Manifest OK — ${result.count} evidence file(s) verified`);
|
|
@@ -603,7 +644,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
|
|
|
603
644
|
}
|
|
604
645
|
}))).addCommand(new commander.Command("dossier").description("Manage entity dossiers for a case").addCommand(new commander.Command("update").description("Append a finding to an entity dossier").argument("<case-id>", "Case ID").argument("<address>", "Entity address or identifier").option("--finding <text>", "Finding to append to the dossier", "").option("--type <type>", "Entity type (eoa|contract|exchange|mixer|unknown)", "unknown").action(async (caseSelector, address, opts) => {
|
|
605
646
|
try {
|
|
606
|
-
const { DossierStore } = await Promise.resolve().then(() => require("./cases-
|
|
647
|
+
const { DossierStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
|
|
607
648
|
const caseId = await resolveCaseSelector(caseSelector);
|
|
608
649
|
const entityType = [
|
|
609
650
|
"eoa",
|
|
@@ -620,7 +661,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
|
|
|
620
661
|
}
|
|
621
662
|
}))).addCommand(new commander.Command("session").description("Manage investigation sessions").addCommand(new commander.Command("start").description("Start a new investigation session for a case").argument("<case-id>", "Case ID").argument("[title...]", "Optional session title").action(async (caseSelector, titleParts) => {
|
|
622
663
|
try {
|
|
623
|
-
const { SessionStore } = await Promise.resolve().then(() => require("./cases-
|
|
664
|
+
const { SessionStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
|
|
624
665
|
const caseId = await resolveCaseSelector(caseSelector);
|
|
625
666
|
const title = titleParts.join(" ").trim();
|
|
626
667
|
const s = await SessionStore.start(caseId, title ? { title } : {});
|
|
@@ -631,7 +672,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
|
|
|
631
672
|
}
|
|
632
673
|
})).addCommand(new commander.Command("end").description("End the current session with findings and next steps").argument("<case-id>", "Case ID").option("--findings <text>", "Key findings from this session", "").option("--next-steps <text>", "Next steps for the investigation", "").action(async (caseSelector, opts) => {
|
|
633
674
|
try {
|
|
634
|
-
const { SessionStore } = await Promise.resolve().then(() => require("./cases-
|
|
675
|
+
const { SessionStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
|
|
635
676
|
const caseId = await resolveCaseSelector(caseSelector);
|
|
636
677
|
await SessionStore.end(caseId, {
|
|
637
678
|
findings: opts.findings,
|
|
@@ -668,9 +709,9 @@ program.command("playbook").description("Run and manage investigation playbooks"
|
|
|
668
709
|
}
|
|
669
710
|
resolvedParams[key] = kv.slice(eq + 1);
|
|
670
711
|
}
|
|
671
|
-
const { resolvePlaybookContent } = await Promise.resolve().then(() => require("./resolver-
|
|
712
|
+
const { resolvePlaybookContent } = await Promise.resolve().then(() => require("./resolver-BUU7ZgW-.cjs"));
|
|
672
713
|
const markdown = await resolvePlaybookContent(name);
|
|
673
|
-
const { PlaybookParser } = await Promise.resolve().then(() => require("./parser-
|
|
714
|
+
const { PlaybookParser } = await Promise.resolve().then(() => require("./parser-BXLAHYnZ.cjs"));
|
|
674
715
|
const definition = PlaybookParser.parse(markdown, resolvedParams);
|
|
675
716
|
for (const spec of definition.params) if (spec.required && !resolvedParams[spec.name] && !spec.default) {
|
|
676
717
|
console.error(`Missing required param: ${spec.name}. Pass with: -p ${spec.name}=<value>`);
|
|
@@ -681,7 +722,7 @@ program.command("playbook").description("Run and manage investigation playbooks"
|
|
|
681
722
|
console.error(`Invalid --from value: "${opts.from}". Must be a positive integer.`);
|
|
682
723
|
process.exit(1);
|
|
683
724
|
}
|
|
684
|
-
const { PlaybookRunner } = await Promise.resolve().then(() => require("./runner-
|
|
725
|
+
const { PlaybookRunner } = await Promise.resolve().then(() => require("./runner-ZYowxCVl.cjs"));
|
|
685
726
|
await PlaybookRunner.run(definition, {
|
|
686
727
|
caseId: opts.case,
|
|
687
728
|
from: fromN,
|
|
@@ -694,7 +735,7 @@ program.command("playbook").description("Run and manage investigation playbooks"
|
|
|
694
735
|
}
|
|
695
736
|
})).addCommand(new commander.Command("list").description("List available playbooks (built-in and user-defined)").action(async () => {
|
|
696
737
|
try {
|
|
697
|
-
const { listPlaybooks } = await Promise.resolve().then(() => require("./resolver-
|
|
738
|
+
const { listPlaybooks } = await Promise.resolve().then(() => require("./resolver-BUU7ZgW-.cjs"));
|
|
698
739
|
const playbooks = await listPlaybooks();
|
|
699
740
|
if (playbooks.length === 0) {
|
|
700
741
|
console.log("No playbooks found.");
|
|
@@ -707,8 +748,8 @@ program.command("playbook").description("Run and manage investigation playbooks"
|
|
|
707
748
|
}
|
|
708
749
|
})).addCommand(new commander.Command("show").description("Show steps for a playbook without executing").argument("<name>", "Playbook name").action(async (name) => {
|
|
709
750
|
try {
|
|
710
|
-
const { resolvePlaybookContent } = await Promise.resolve().then(() => require("./resolver-
|
|
711
|
-
const { PlaybookParser } = await Promise.resolve().then(() => require("./parser-
|
|
751
|
+
const { resolvePlaybookContent } = await Promise.resolve().then(() => require("./resolver-BUU7ZgW-.cjs"));
|
|
752
|
+
const { PlaybookParser } = await Promise.resolve().then(() => require("./parser-BXLAHYnZ.cjs"));
|
|
712
753
|
const markdown = await resolvePlaybookContent(name);
|
|
713
754
|
const definition = PlaybookParser.parse(markdown, {});
|
|
714
755
|
console.log(`Playbook: ${definition.name} v${definition.version}`);
|
|
@@ -731,12 +772,12 @@ program.command("viz").description("Generate money flow visualization").argument
|
|
|
731
772
|
console.error("Provide either a case ID or --data <file.json>");
|
|
732
773
|
process.exit(1);
|
|
733
774
|
}
|
|
734
|
-
const { generateVisualization } = await Promise.resolve().then(() => require("./viz-
|
|
775
|
+
const { generateVisualization } = await Promise.resolve().then(() => require("./viz-Da9YWN_I.cjs")).then((n) => n.viz_exports);
|
|
735
776
|
const result = await generateVisualization({
|
|
736
777
|
caseId,
|
|
737
778
|
dataFile: opts.data
|
|
738
779
|
});
|
|
739
|
-
const { startServer } = await Promise.resolve().then(() => require("./server-
|
|
780
|
+
const { startServer } = await Promise.resolve().then(() => require("./server-BqVdWath.cjs")).then((n) => n.server_exports);
|
|
740
781
|
const port = parseInt(opts.port, 10);
|
|
741
782
|
startServer(port);
|
|
742
783
|
const url = `http://127.0.0.1:${port}/viz/${result.vizId}`;
|