From 54a67dbeb835a57441b3165fc46f1cb989c29699 Mon Sep 17 00:00:00 2001 From: mrcyclo Date: Tue, 28 Apr 2026 09:50:11 +0700 Subject: [PATCH] Add TOOL_HOSTS constant for per-tool DNS mapping and integrate into MitmToolCard component (#788) --- .../cli-tools/components/MitmToolCard.js | 15 +++++++++++++++ src/mitm/dns/dnsConfig.js | 11 ++--------- src/shared/constants/mitmToolHosts.js | 12 ++++++++++++ 3 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 src/shared/constants/mitmToolHosts.js diff --git a/src/app/(dashboard)/dashboard/cli-tools/components/MitmToolCard.js b/src/app/(dashboard)/dashboard/cli-tools/components/MitmToolCard.js index d7a2848..04ccf4e 100644 --- a/src/app/(dashboard)/dashboard/cli-tools/components/MitmToolCard.js +++ b/src/app/(dashboard)/dashboard/cli-tools/components/MitmToolCard.js @@ -2,6 +2,7 @@ import { useState, useEffect, useCallback } from "react"; import { Card, Button, Badge, Input, ModelSelectModal } from "@/shared/components"; +import { TOOL_HOSTS } from "@/shared/constants/mitmToolHosts"; import Image from "next/image"; /** @@ -34,6 +35,7 @@ export default function MitmToolCard({ const [modalOpen, setModalOpen] = useState(false); const [currentEditingAlias, setCurrentEditingAlias] = useState(null); + const mitmHosts = TOOL_HOSTS[tool.id] ?? []; const isWindows = typeof navigator !== "undefined" && navigator.userAgent?.includes("Windows"); useEffect(() => { @@ -162,6 +164,19 @@ export default function MitmToolCard({ {isExpanded && (
+ {/* Hosts */} + {mitmHosts.length > 0 && ( +
+

+ Edit hosts file manually to add the following entries: +

+
    + {mitmHosts.map((h) => ( +
  • 127.0.0.1 {h}
  • + ))} +
+
+ )} {/* Info */}

Toggle DNS to redirect {tool.name} traffic through 9Router via MITM.

diff --git a/src/mitm/dns/dnsConfig.js b/src/mitm/dns/dnsConfig.js index 801adf6..70d0048 100644 --- a/src/mitm/dns/dnsConfig.js +++ b/src/mitm/dns/dnsConfig.js @@ -3,14 +3,7 @@ const fs = require("fs"); const path = require("path"); const os = require("os"); const { log, err } = require("../logger"); - -// Per-tool DNS hosts mapping -const TOOL_HOSTS = { - antigravity: ["daily-cloudcode-pa.googleapis.com", "cloudcode-pa.googleapis.com"], - copilot: ["api.individual.githubcopilot.com"], - kiro: ["q.us-east-1.amazonaws.com", "codewhisperer.us-east-1.amazonaws.com"], - cursor: ["api2.cursor.sh"], -}; +const { TOOL_HOSTS } = require("../../shared/constants/mitmToolHosts"); const IS_WIN = process.platform === "win32"; const IS_MAC = process.platform === "darwin"; @@ -25,7 +18,7 @@ const HOSTS_FILE = IS_WIN function executeElevatedPowerShell(psScriptPath, timeoutMs = 30000) { const flagFile = path.join(os.tmpdir(), `ps_done_${Date.now()}.flag`); const psSQ = (s) => s.replace(/'/g, "''"); - + let psContent = fs.readFileSync(psScriptPath, "utf8"); psContent += `\nSet-Content -Path '${psSQ(flagFile)}' -Value 'done' -Encoding UTF8\n`; fs.writeFileSync(psScriptPath, psContent, "utf8"); diff --git a/src/shared/constants/mitmToolHosts.js b/src/shared/constants/mitmToolHosts.js new file mode 100644 index 0000000..ecd910c --- /dev/null +++ b/src/shared/constants/mitmToolHosts.js @@ -0,0 +1,12 @@ +/** + * Per-tool DNS hosts — written to hosts file as 127.0.0.1 when MITM DNS is enabled. + * Kept in sync with MITM routing; shared by Node (dnsConfig) and dashboard UI. + */ +const TOOL_HOSTS = { + antigravity: ["daily-cloudcode-pa.googleapis.com", "cloudcode-pa.googleapis.com"], + copilot: ["api.individual.githubcopilot.com"], + kiro: ["q.us-east-1.amazonaws.com", "codewhisperer.us-east-1.amazonaws.com"], + cursor: ["api2.cursor.sh"], +}; + +module.exports = { TOOL_HOSTS };