chain-insights 0.2.16 → 0.2.18

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 (130) hide show
  1. package/README.md +29 -18
  2. package/dist/{active-Dv7Tu-O4.cjs → active-BVr55kvW.cjs} +1 -1
  3. package/dist/{active-BSrxLKwn.mjs → active-ByNgjuAg.mjs} +2 -2
  4. package/dist/{active-BSrxLKwn.mjs.map → active-ByNgjuAg.mjs.map} +1 -1
  5. package/dist/{app-BjjuQM0B.mjs → app-DdWQF_zb.mjs} +4 -4
  6. package/dist/{app-BjjuQM0B.mjs.map → app-DdWQF_zb.mjs.map} +1 -1
  7. package/dist/{app-Dq1TdB6p.cjs → app-DxlQE_P5.cjs} +4 -4
  8. package/dist/{artifact-server-Dxz5YbuQ.mjs → artifact-server-4DiMvwhC.mjs} +2 -2
  9. package/dist/{artifact-server-Dxz5YbuQ.mjs.map → artifact-server-4DiMvwhC.mjs.map} +1 -1
  10. package/dist/{artifact-server-DoxJ7fCx.cjs → artifact-server-B-3ho4bk.cjs} +1 -2
  11. package/dist/{call-args-Lk_wOJxd.mjs → call-args-DPXdX3_D.mjs} +1 -1
  12. package/dist/{call-args-Lk_wOJxd.mjs.map → call-args-DPXdX3_D.mjs.map} +1 -1
  13. package/dist/{capabilities-DliMBim-.mjs → capabilities-BShqspb-.mjs} +2 -2
  14. package/dist/{capabilities-DliMBim-.mjs.map → capabilities-BShqspb-.mjs.map} +1 -1
  15. package/dist/{capabilities-CB97WMA5.cjs → capabilities-Bm0JDbV7.cjs} +1 -1
  16. package/dist/cases-c0iV-XLI.cjs +9 -0
  17. package/dist/cases-qjPtbnUd.mjs +6 -0
  18. package/dist/cli.cjs +64 -64
  19. package/dist/cli.mjs +63 -63
  20. package/dist/cli.mjs.map +1 -1
  21. package/dist/{client-D4Bq0rp9.mjs → client-D4_hd4AP.mjs} +23 -9
  22. package/dist/client-D4_hd4AP.mjs.map +1 -0
  23. package/dist/{client-D4fZgIaO.cjs → client-DPc2eyVN.cjs} +27 -7
  24. package/dist/{config-BwrBYmiC.mjs → config-9KYXaAv-.mjs} +3 -3
  25. package/dist/{config-BwrBYmiC.mjs.map → config-9KYXaAv-.mjs.map} +1 -1
  26. package/dist/{config-Bmdl5hdk.cjs → config-BhYbhLDI.cjs} +2 -2
  27. package/dist/{dossier-BsroDgD3.mjs → dossier-Bl0NkJKC.mjs} +3 -3
  28. package/dist/{dossier-BsroDgD3.mjs.map → dossier-Bl0NkJKC.mjs.map} +1 -1
  29. package/dist/{dossier-DtxREpPm.cjs → dossier-Br62hCG7.cjs} +3 -3
  30. package/dist/{evidence-BGcdKxuV.cjs → evidence-CvEesemA.cjs} +3 -3
  31. package/dist/{evidence-BhvFW-y_.mjs → evidence-D96PTzOQ.mjs} +3 -3
  32. package/dist/{evidence-BhvFW-y_.mjs.map → evidence-D96PTzOQ.mjs.map} +1 -1
  33. package/dist/{format-Ce1RObVl.mjs → format-Bq94jSyw.mjs} +1 -1
  34. package/dist/{format-Ce1RObVl.mjs.map → format-Bq94jSyw.mjs.map} +1 -1
  35. package/dist/{frontmatter-D8wWCeOa.mjs → frontmatter-D0ccQnUM.mjs} +1 -1
  36. package/dist/{frontmatter-D8wWCeOa.mjs.map → frontmatter-D0ccQnUM.mjs.map} +1 -1
  37. package/dist/{graph-normalizer-Cv9yK9Pg.mjs → graph-normalizer-CXP06jKh.mjs} +1 -1
  38. package/dist/{graph-normalizer-Cv9yK9Pg.mjs.map → graph-normalizer-CXP06jKh.mjs.map} +1 -1
  39. package/dist/{graph-reports-DU05YCei.cjs → graph-reports-B3mkLP8Z.cjs} +3 -3
  40. package/dist/{graph-reports-C4TBjCkM.mjs → graph-reports-BDELxmpi.mjs} +3 -3
  41. package/dist/{graph-reports-C4TBjCkM.mjs.map → graph-reports-BDELxmpi.mjs.map} +1 -1
  42. package/dist/{html-generator-V6Bp0uRb.mjs → html-generator-AowOmzyi.mjs} +2 -2
  43. package/dist/{html-generator-V6Bp0uRb.mjs.map → html-generator-AowOmzyi.mjs.map} +1 -1
  44. package/dist/{html-generator-CAv81IWH.cjs → html-generator-Bx3UcLTB.cjs} +1 -1
  45. package/dist/index.cjs +8 -8
  46. package/dist/index.d.cts.map +1 -1
  47. package/dist/index.d.mts.map +1 -1
  48. package/dist/index.mjs +8 -8
  49. package/dist/{init-BjuFt54X.cjs → init-BvpZtFiT.cjs} +4 -5
  50. package/dist/{init-CaOsHTIo.mjs → init-CZbZegIW.mjs} +4 -5
  51. package/dist/init-CZbZegIW.mjs.map +1 -0
  52. package/dist/mcp-proxy.cjs +75 -38
  53. package/dist/mcp-proxy.d.cts.map +1 -1
  54. package/dist/mcp-proxy.d.mts.map +1 -1
  55. package/dist/mcp-proxy.mjs +74 -37
  56. package/dist/mcp-proxy.mjs.map +1 -1
  57. package/dist/{output-root-CmWM7aV2.mjs → output-root-BRhzhhXZ.mjs} +3 -3
  58. package/dist/{output-root-CmWM7aV2.mjs.map → output-root-BRhzhhXZ.mjs.map} +1 -1
  59. package/dist/{output-root-CFYms3ad.cjs → output-root-YIbl6PwF.cjs} +2 -2
  60. package/dist/{parser-BUIWW1OH.cjs → parser-BXLAHYnZ.cjs} +1 -1
  61. package/dist/{parser-DO0_SssG.mjs → parser-CJfMsOl6.mjs} +1 -1
  62. package/dist/{parser-DO0_SssG.mjs.map → parser-CJfMsOl6.mjs.map} +1 -1
  63. package/dist/{public-tools-D4UI-Zb0.mjs → public-tools-D6Q5MTcO.mjs} +7 -7
  64. package/dist/{public-tools-D4UI-Zb0.mjs.map → public-tools-D6Q5MTcO.mjs.map} +1 -1
  65. package/dist/{public-tools-XSpkz2ky.cjs → public-tools-V7ON7goq.cjs} +7 -7
  66. package/dist/{resolver-zYbu4wDV.cjs → resolver-BUU7ZgW-.cjs} +1 -1
  67. package/dist/{resolver-C2ZS7oC8.mjs → resolver-D7VBb0uB.mjs} +1 -1
  68. package/dist/{resolver-C2ZS7oC8.mjs.map → resolver-D7VBb0uB.mjs.map} +1 -1
  69. package/dist/{runner-BhUHbiHG.mjs → runner-BatyCxv7.mjs} +7 -7
  70. package/dist/{runner-BhUHbiHG.mjs.map → runner-BatyCxv7.mjs.map} +1 -1
  71. package/dist/{runner-1Eq55OYb.cjs → runner-CCA7SJ7X.cjs} +6 -7
  72. package/dist/{schema-8d0rVIdZ.mjs → schema-BbQVXp36.mjs} +2 -2
  73. package/dist/{schema-8d0rVIdZ.mjs.map → schema-BbQVXp36.mjs.map} +1 -1
  74. package/dist/{schema-4XpzDFQM.cjs → schema-DN-KLkYN.cjs} +1 -1
  75. package/dist/{schema-cache-CgWRCN2N.cjs → schema-cache-CJk1EL3L.cjs} +1 -1
  76. package/dist/{schema-cache-9CksD7tX.mjs → schema-cache-DwDvPy4e.mjs} +1 -1
  77. package/dist/{schema-cache-9CksD7tX.mjs.map → schema-cache-DwDvPy4e.mjs.map} +1 -1
  78. package/dist/{selector-xjm6NTHI.mjs → selector-CTUiQrzI.mjs} +2 -2
  79. package/dist/{selector-xjm6NTHI.mjs.map → selector-CTUiQrzI.mjs.map} +1 -1
  80. package/dist/{selector-CkFcTXzz.cjs → selector-DBS2jYH4.cjs} +1 -1
  81. package/dist/{server-BkM5xrXb.mjs → server-BDlbmGbL.mjs} +3 -3
  82. package/dist/{server-BkM5xrXb.mjs.map → server-BDlbmGbL.mjs.map} +1 -1
  83. package/dist/{server-DXowbpfi.cjs → server-C3y1gQmZ.cjs} +2 -2
  84. package/dist/{session-CcTgYxsj.mjs → session-Bha3zFrx.mjs} +3 -3
  85. package/dist/{session-CcTgYxsj.mjs.map → session-Bha3zFrx.mjs.map} +1 -1
  86. package/dist/{session-BpNylyuJ.cjs → session-DwyikazY.cjs} +3 -3
  87. package/dist/{setup-DOpKPrlx.cjs → setup-CDha4B9s.cjs} +1 -1
  88. package/dist/{setup-DyrWHuwQ.mjs → setup-yXK8agdn.mjs} +1 -1
  89. package/dist/{setup-DyrWHuwQ.mjs.map → setup-yXK8agdn.mjs.map} +1 -1
  90. package/dist/{store-BoWE-Gtl.mjs → store-BT2SCcQr.mjs} +5 -5
  91. package/dist/{store-BoWE-Gtl.mjs.map → store-BT2SCcQr.mjs.map} +1 -1
  92. package/dist/{store-BiUhQOIf.cjs → store-DogLawSj.cjs} +5 -5
  93. package/dist/{tool-visibility-3Z_KvO9Q.mjs → tool-visibility-BHRFLXuU.mjs} +2 -2
  94. package/dist/{tool-visibility-3Z_KvO9Q.mjs.map → tool-visibility-BHRFLXuU.mjs.map} +1 -1
  95. package/dist/{tool-visibility-CwgY205r.cjs → tool-visibility-iAVQV3t0.cjs} +1 -1
  96. package/dist/{tools-f_vJUZAF.cjs → tools-DY8h0WbE.cjs} +2 -2
  97. package/dist/{tools-Cp2jAAAb.mjs → tools-Py6SXg6J.mjs} +3 -3
  98. package/dist/{tools-Cp2jAAAb.mjs.map → tools-Py6SXg6J.mjs.map} +1 -1
  99. package/dist/{topup-server-DUjyFftI.mjs → topup-server-6MH7q73X.mjs} +5 -5
  100. package/dist/{topup-server-DUjyFftI.mjs.map → topup-server-6MH7q73X.mjs.map} +1 -1
  101. package/dist/{topup-server-BZuQifvh.cjs → topup-server-DjUjhNjv.cjs} +4 -4
  102. package/dist/{version-1gP19Lhi.mjs → version-BA3J8hu4.mjs} +1 -1
  103. package/dist/{version-1gP19Lhi.mjs.map → version-BA3J8hu4.mjs.map} +1 -1
  104. package/dist/{version-BNGtdpmH.cjs → version-CO9Or_YV.cjs} +0 -1
  105. package/dist/{data-extractor-BNGj7ECT.cjs → viz-Da9YWN_I.cjs} +37 -8
  106. package/dist/{data-extractor-DFzsa5CS.mjs → viz-DkJyqlUu.mjs} +35 -6
  107. package/dist/viz-DkJyqlUu.mjs.map +1 -0
  108. package/dist/{wallet-BMelXBYP.mjs → wallet-D8IqFRKY.mjs} +2 -2
  109. package/dist/{wallet-BMelXBYP.mjs.map → wallet-D8IqFRKY.mjs.map} +1 -1
  110. package/dist/{wallet-RnvvSpV2.cjs → wallet-TAlNMvIM.cjs} +1 -1
  111. package/docs/architecture.md +1 -2
  112. package/docs/graph-tools.md +3 -3
  113. package/package.json +24 -4
  114. package/skills/chain-insights-investigation/SKILL.md +9 -9
  115. package/skills/chain-insights-trace-funds/SKILL.md +3 -3
  116. package/skills/test-chain-insights-graphrag-mcp/SKILL.md +1 -1
  117. package/dist/cases-By7INiOa.mjs +0 -6
  118. package/dist/cases-CDcNU91B.cjs +0 -9
  119. package/dist/client-D4Bq0rp9.mjs.map +0 -1
  120. package/dist/data-extractor-DFzsa5CS.mjs.map +0 -1
  121. package/dist/init-CaOsHTIo.mjs.map +0 -1
  122. package/dist/viz-BlCJe6Tk.mjs +0 -35
  123. package/dist/viz-BlCJe6Tk.mjs.map +0 -1
  124. package/dist/viz-ClezVXrJ.cjs +0 -44
  125. /package/dist/{call-args-DQA2QcRA.cjs → call-args-CcUV6gFS.cjs} +0 -0
  126. /package/dist/{chunk-CZWwpsFl.cjs → chunk-DakpK96I.cjs} +0 -0
  127. /package/dist/{format-DOrPvXEr.cjs → format-9NLBykEL.cjs} +0 -0
  128. /package/dist/{frontmatter-DgAuai7E.cjs → frontmatter-Dvqa5HX6.cjs} +0 -0
  129. /package/dist/{graph-normalizer-DeIj6Ses.cjs → graph-normalizer-DbjlbMpz.cjs} +0 -0
  130. /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-CZWwpsFl.cjs");
2
- const require_version = require("./version-BNGtdpmH.cjs");
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-CkFcTXzz.cjs"));
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-Dv7Tu-O4.cjs")).then((n) => n.active_exports);
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-CDcNU91B.cjs"));
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-Bmdl5hdk.cjs")).then((n) => n.config_exports);
74
+ const { loadConfig } = await Promise.resolve().then(() => require("./config-BhYbhLDI.cjs")).then((n) => n.config_exports);
75
75
  const config = await loadConfig();
76
- const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-D4fZgIaO.cjs")).then((n) => n.client_exports);
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-Bmdl5hdk.cjs")).then((n) => n.config_exports);
96
- const { fetchNetworkCapabilities, formatNetworkCapabilities } = await Promise.resolve().then(() => require("./capabilities-CB97WMA5.cjs"));
95
+ const { loadConfig } = await Promise.resolve().then(() => require("./config-BhYbhLDI.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-CFYms3ad.cjs")).then((n) => n.output_root_exports);
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-DXowbpfi.cjs")).then((n) => n.server_exports);
113
+ const { startServer } = await Promise.resolve().then(() => require("./server-C3y1gQmZ.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-Bmdl5hdk.cjs")).then((n) => n.config_exports);
123
- const { findActiveWorkspace, activeDataDir } = await Promise.resolve().then(() => require("./active-Dv7Tu-O4.cjs")).then((n) => n.active_exports);
122
+ const { loadConfig } = await Promise.resolve().then(() => require("./config-BhYbhLDI.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-Bmdl5hdk.cjs")).then((n) => n.config_exports);
135
+ const { saveConfig } = await Promise.resolve().then(() => require("./config-BhYbhLDI.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-Bmdl5hdk.cjs")).then((n) => n.config_exports);
150
+ const { saveConfig } = await Promise.resolve().then(() => require("./config-BhYbhLDI.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-Bmdl5hdk.cjs")).then((n) => n.config_exports);
163
+ const { loadConfig } = await Promise.resolve().then(() => require("./config-BhYbhLDI.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-Bmdl5hdk.cjs")).then((n) => n.config_exports);
178
+ const { saveConfig } = await Promise.resolve().then(() => require("./config-BhYbhLDI.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-Bmdl5hdk.cjs")).then((n) => n.config_exports);
193
+ const { saveConfig } = await Promise.resolve().then(() => require("./config-BhYbhLDI.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-Bmdl5hdk.cjs")).then((n) => n.config_exports);
206
+ const { loadConfig } = await Promise.resolve().then(() => require("./config-BhYbhLDI.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-BjuFt54X.cjs"));
218
+ const { initWorkspace } = await Promise.resolve().then(() => require("./init-BvpZtFiT.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-DOpKPrlx.cjs"));
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-Bmdl5hdk.cjs")).then((n) => n.config_exports);
254
- const { CONFIG_KEYS } = await Promise.resolve().then(() => require("./schema-4XpzDFQM.cjs")).then((n) => n.schema_exports);
253
+ const { loadConfig } = await Promise.resolve().then(() => require("./config-BhYbhLDI.cjs")).then((n) => n.config_exports);
254
+ const { CONFIG_KEYS } = await Promise.resolve().then(() => require("./schema-DN-KLkYN.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-RnvvSpV2.cjs")).then((n) => n.wallet_exports);
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-Bmdl5hdk.cjs")).then((n) => n.config_exports);
275
- const { CONFIG_KEYS, DEFAULT_CONFIG } = await Promise.resolve().then(() => require("./schema-4XpzDFQM.cjs")).then((n) => n.schema_exports);
274
+ const { loadConfig, saveConfig } = await Promise.resolve().then(() => require("./config-BhYbhLDI.cjs")).then((n) => n.config_exports);
275
+ const { CONFIG_KEYS, DEFAULT_CONFIG } = await Promise.resolve().then(() => require("./schema-DN-KLkYN.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-f_vJUZAF.cjs")).then((n) => n.tools_exports);
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-f_vJUZAF.cjs")).then((n) => n.tools_exports);
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-f_vJUZAF.cjs")).then((n) => n.tools_exports);
308
- const { startTopupServer } = await Promise.resolve().then(() => require("./topup-server-BZuQifvh.cjs")).then((n) => n.topup_server_exports);
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-DjUjhNjv.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-CgWRCN2N.cjs"));
339
- const { formatToolsTable } = await Promise.resolve().then(() => require("./format-DOrPvXEr.cjs"));
340
- const { visibleRemoteTools } = await Promise.resolve().then(() => require("./tool-visibility-CwgY205r.cjs")).then((n) => n.tool_visibility_exports);
341
- const { loadConfig } = await Promise.resolve().then(() => require("./config-Bmdl5hdk.cjs")).then((n) => n.config_exports);
342
- const { createConfiguredGraphMcpFetch, resolveGraphMcpEndpoint } = await Promise.resolve().then(() => require("./client-D4fZgIaO.cjs")).then((n) => n.client_exports);
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-BhYbhLDI.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-XSpkz2ky.cjs"));
381
+ const { addressRisk } = await Promise.resolve().then(() => require("./public-tools-V7ON7goq.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-CFYms3ad.cjs")).then((n) => n.output_root_exports);
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-XSpkz2ky.cjs"));
409
+ const { trackFunds } = await Promise.resolve().then(() => require("./public-tools-V7ON7goq.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-CFYms3ad.cjs")).then((n) => n.output_root_exports);
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-XSpkz2ky.cjs"));
432
+ const { scamTopology } = await Promise.resolve().then(() => require("./public-tools-V7ON7goq.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;
@@ -450,13 +450,13 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
450
450
  }
451
451
  })).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
452
  try {
453
- const { parseMcpCallArgs } = await Promise.resolve().then(() => require("./call-args-DQA2QcRA.cjs"));
454
- const { assertPublicMcpToolName } = await Promise.resolve().then(() => require("./tool-visibility-CwgY205r.cjs")).then((n) => n.tool_visibility_exports);
453
+ const { parseMcpCallArgs } = await Promise.resolve().then(() => require("./call-args-CcUV6gFS.cjs"));
454
+ const { assertPublicMcpToolName } = await Promise.resolve().then(() => require("./tool-visibility-iAVQV3t0.cjs")).then((n) => n.tool_visibility_exports);
455
455
  const args = parseMcpCallArgs(rawArgs);
456
456
  assertPublicMcpToolName(tool);
457
457
  await withGraphMcpClient("chain-insights-cli-call", async (client, config) => {
458
458
  if (tool === "address_risk") {
459
- const { addressRisk } = await Promise.resolve().then(() => require("./public-tools-XSpkz2ky.cjs"));
459
+ const { addressRisk } = await Promise.resolve().then(() => require("./public-tools-V7ON7goq.cjs"));
460
460
  const result = await addressRisk(client, {
461
461
  address: String(args["address"] ?? ""),
462
462
  network: String(args["network"] ?? ""),
@@ -466,7 +466,7 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
466
466
  return;
467
467
  }
468
468
  if (tool === "track_funds") {
469
- const { trackFunds } = await Promise.resolve().then(() => require("./public-tools-XSpkz2ky.cjs"));
469
+ const { trackFunds } = await Promise.resolve().then(() => require("./public-tools-V7ON7goq.cjs"));
470
470
  const result = await trackFunds(client, config, {
471
471
  trustedAddresses: args["trusted_addresses"] ?? "",
472
472
  untrustedAddresses: args["untrusted_addresses"],
@@ -481,7 +481,7 @@ program.command("mcp").description("Interact with the Chain Insights MCP endpoin
481
481
  return;
482
482
  }
483
483
  if (tool === "scam_topology") {
484
- const { scamTopology } = await Promise.resolve().then(() => require("./public-tools-XSpkz2ky.cjs"));
484
+ const { scamTopology } = await Promise.resolve().then(() => require("./public-tools-V7ON7goq.cjs"));
485
485
  const victimAddress = String(args["victim_address"] ?? "").trim();
486
486
  if (!victimAddress) throw new Error("victim_address is required");
487
487
  const incidentTimestampMs = optionalNumberArg(args["incident_timestamp_ms"], "incident_timestamp_ms");
@@ -513,14 +513,14 @@ const caseCommand = new commander.Command("case").description("Manage investigat
513
513
  }).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
514
  try {
515
515
  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-CDcNU91B.cjs"));
516
+ const { CaseStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
517
517
  const tags = opts.tags ? opts.tags.split(",").map((t) => t.trim()).filter(Boolean) : [];
518
518
  const c = await CaseStore.create({
519
519
  name,
520
520
  tags,
521
521
  description: opts.description
522
522
  });
523
- const { casesRoot } = await Promise.resolve().then(() => require("./store-BiUhQOIf.cjs"));
523
+ const { casesRoot } = await Promise.resolve().then(() => require("./store-DogLawSj.cjs"));
524
524
  console.log(`Case opened: ${c.id}`);
525
525
  console.log(`Directory: ${node_path.default.join(casesRoot(), c.id)}/`);
526
526
  console.log(`Status: ${c.status}`);
@@ -530,7 +530,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
530
530
  }
531
531
  })).addCommand(new commander.Command("activate").description("Activate a case (set status to active)").argument("<case-id>", "Case ID to activate").action(async (caseSelector) => {
532
532
  try {
533
- const { CaseStore } = await Promise.resolve().then(() => require("./cases-CDcNU91B.cjs"));
533
+ const { CaseStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
534
534
  const caseId = await resolveCaseSelector(caseSelector);
535
535
  const c = await CaseStore.setStatus(caseId, "active");
536
536
  console.log(`Case ${c.id} is now: active`);
@@ -540,7 +540,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
540
540
  }
541
541
  })).addCommand(new commander.Command("suspend").description("Suspend a case (set status to suspended)").argument("<case-id>", "Case ID to suspend").action(async (caseSelector) => {
542
542
  try {
543
- const { CaseStore } = await Promise.resolve().then(() => require("./cases-CDcNU91B.cjs"));
543
+ const { CaseStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
544
544
  const caseId = await resolveCaseSelector(caseSelector);
545
545
  const c = await CaseStore.setStatus(caseId, "suspended");
546
546
  console.log(`Case ${c.id} is now: suspended`);
@@ -550,7 +550,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
550
550
  }
551
551
  })).addCommand(new commander.Command("close").description("Close a case permanently").argument("<case-id>", "Case ID to close").action(async (caseSelector) => {
552
552
  try {
553
- const { CaseStore } = await Promise.resolve().then(() => require("./cases-CDcNU91B.cjs"));
553
+ const { CaseStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
554
554
  const caseId = await resolveCaseSelector(caseSelector);
555
555
  const c = await CaseStore.setStatus(caseId, "closed");
556
556
  console.log(`Case ${c.id} is now: closed`);
@@ -560,7 +560,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
560
560
  }
561
561
  })).addCommand(new commander.Command("list").description("List all investigation cases").option("--status <status>", "Filter by status (open|active|suspended|closed)").action(async (opts) => {
562
562
  try {
563
- const { CaseStore } = await Promise.resolve().then(() => require("./cases-CDcNU91B.cjs"));
563
+ const { CaseStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
564
564
  const cases = await CaseStore.list();
565
565
  const filtered = opts.status ? cases.filter((c) => c.status === opts.status) : cases;
566
566
  if (filtered.length === 0) {
@@ -574,7 +574,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
574
574
  }
575
575
  })).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
576
  try {
577
- const { EvidenceStore } = await Promise.resolve().then(() => require("./cases-CDcNU91B.cjs"));
577
+ const { EvidenceStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
578
578
  const caseId = await resolveCaseSelector(caseSelector);
579
579
  const result = await EvidenceStore.append(caseId, {
580
580
  source: opts.source,
@@ -589,7 +589,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
589
589
  }
590
590
  })).addCommand(new commander.Command("verify").description("Verify evidence manifest integrity for a case").argument("<case-id>", "Case ID to verify").action(async (caseSelector) => {
591
591
  try {
592
- const { EvidenceStore } = await Promise.resolve().then(() => require("./cases-CDcNU91B.cjs"));
592
+ const { EvidenceStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
593
593
  const caseId = await resolveCaseSelector(caseSelector);
594
594
  const result = await EvidenceStore.verifyManifest(caseId);
595
595
  if (result.ok) console.log(`Manifest OK — ${result.count} evidence file(s) verified`);
@@ -603,7 +603,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
603
603
  }
604
604
  }))).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
605
  try {
606
- const { DossierStore } = await Promise.resolve().then(() => require("./cases-CDcNU91B.cjs"));
606
+ const { DossierStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
607
607
  const caseId = await resolveCaseSelector(caseSelector);
608
608
  const entityType = [
609
609
  "eoa",
@@ -620,7 +620,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
620
620
  }
621
621
  }))).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
622
  try {
623
- const { SessionStore } = await Promise.resolve().then(() => require("./cases-CDcNU91B.cjs"));
623
+ const { SessionStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
624
624
  const caseId = await resolveCaseSelector(caseSelector);
625
625
  const title = titleParts.join(" ").trim();
626
626
  const s = await SessionStore.start(caseId, title ? { title } : {});
@@ -631,7 +631,7 @@ const caseCommand = new commander.Command("case").description("Manage investigat
631
631
  }
632
632
  })).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
633
  try {
634
- const { SessionStore } = await Promise.resolve().then(() => require("./cases-CDcNU91B.cjs"));
634
+ const { SessionStore } = await Promise.resolve().then(() => require("./cases-c0iV-XLI.cjs"));
635
635
  const caseId = await resolveCaseSelector(caseSelector);
636
636
  await SessionStore.end(caseId, {
637
637
  findings: opts.findings,
@@ -668,9 +668,9 @@ program.command("playbook").description("Run and manage investigation playbooks"
668
668
  }
669
669
  resolvedParams[key] = kv.slice(eq + 1);
670
670
  }
671
- const { resolvePlaybookContent } = await Promise.resolve().then(() => require("./resolver-zYbu4wDV.cjs"));
671
+ const { resolvePlaybookContent } = await Promise.resolve().then(() => require("./resolver-BUU7ZgW-.cjs"));
672
672
  const markdown = await resolvePlaybookContent(name);
673
- const { PlaybookParser } = await Promise.resolve().then(() => require("./parser-BUIWW1OH.cjs"));
673
+ const { PlaybookParser } = await Promise.resolve().then(() => require("./parser-BXLAHYnZ.cjs"));
674
674
  const definition = PlaybookParser.parse(markdown, resolvedParams);
675
675
  for (const spec of definition.params) if (spec.required && !resolvedParams[spec.name] && !spec.default) {
676
676
  console.error(`Missing required param: ${spec.name}. Pass with: -p ${spec.name}=<value>`);
@@ -681,7 +681,7 @@ program.command("playbook").description("Run and manage investigation playbooks"
681
681
  console.error(`Invalid --from value: "${opts.from}". Must be a positive integer.`);
682
682
  process.exit(1);
683
683
  }
684
- const { PlaybookRunner } = await Promise.resolve().then(() => require("./runner-1Eq55OYb.cjs"));
684
+ const { PlaybookRunner } = await Promise.resolve().then(() => require("./runner-CCA7SJ7X.cjs"));
685
685
  await PlaybookRunner.run(definition, {
686
686
  caseId: opts.case,
687
687
  from: fromN,
@@ -694,7 +694,7 @@ program.command("playbook").description("Run and manage investigation playbooks"
694
694
  }
695
695
  })).addCommand(new commander.Command("list").description("List available playbooks (built-in and user-defined)").action(async () => {
696
696
  try {
697
- const { listPlaybooks } = await Promise.resolve().then(() => require("./resolver-zYbu4wDV.cjs"));
697
+ const { listPlaybooks } = await Promise.resolve().then(() => require("./resolver-BUU7ZgW-.cjs"));
698
698
  const playbooks = await listPlaybooks();
699
699
  if (playbooks.length === 0) {
700
700
  console.log("No playbooks found.");
@@ -707,8 +707,8 @@ program.command("playbook").description("Run and manage investigation playbooks"
707
707
  }
708
708
  })).addCommand(new commander.Command("show").description("Show steps for a playbook without executing").argument("<name>", "Playbook name").action(async (name) => {
709
709
  try {
710
- const { resolvePlaybookContent } = await Promise.resolve().then(() => require("./resolver-zYbu4wDV.cjs"));
711
- const { PlaybookParser } = await Promise.resolve().then(() => require("./parser-BUIWW1OH.cjs"));
710
+ const { resolvePlaybookContent } = await Promise.resolve().then(() => require("./resolver-BUU7ZgW-.cjs"));
711
+ const { PlaybookParser } = await Promise.resolve().then(() => require("./parser-BXLAHYnZ.cjs"));
712
712
  const markdown = await resolvePlaybookContent(name);
713
713
  const definition = PlaybookParser.parse(markdown, {});
714
714
  console.log(`Playbook: ${definition.name} v${definition.version}`);
@@ -731,12 +731,12 @@ program.command("viz").description("Generate money flow visualization").argument
731
731
  console.error("Provide either a case ID or --data <file.json>");
732
732
  process.exit(1);
733
733
  }
734
- const { generateVisualization } = await Promise.resolve().then(() => require("./viz-ClezVXrJ.cjs")).then((n) => n.viz_exports);
734
+ const { generateVisualization } = await Promise.resolve().then(() => require("./viz-Da9YWN_I.cjs")).then((n) => n.viz_exports);
735
735
  const result = await generateVisualization({
736
736
  caseId,
737
737
  dataFile: opts.data
738
738
  });
739
- const { startServer } = await Promise.resolve().then(() => require("./server-DXowbpfi.cjs")).then((n) => n.server_exports);
739
+ const { startServer } = await Promise.resolve().then(() => require("./server-C3y1gQmZ.cjs")).then((n) => n.server_exports);
740
740
  const port = parseInt(opts.port, 10);
741
741
  startServer(port);
742
742
  const url = `http://127.0.0.1:${port}/viz/${result.vizId}`;